【问题标题】:Index XML with the Go bleve text indexing library使用 Go bleve 文本索引库索引 XML
【发布时间】:2014-09-16 02:18:38
【问题描述】:

如何使用 bleve 文本索引库 https://github.com/blevesearch/bleve 来索引 XML 内容?

我曾想过在 Go 中使用类似这种 XML 解析器的代码:https://github.com/dps/go-xml-parse,但是我如何将解析的内容传递给 Bleve 以进行索引?

更新:我的 XML:

我的 XML 如下所示:

<page>
    <title>Title here</title>
    <image>image url here</title>
    <text>A sentence of two about the topic</title>
    <facts>
        <fact>Fact 1</fact>
        <fact>Fact 2</fact>
        <fact>Fact 3</fact>
    </facts>
</page>

【问题讨论】:

  • 对于琐碎的情况,看起来您将 XML 加载到带有 encoding/xml 的结构中,然后让 bleve 完成其余的工作;见godoc.org/github.com/blevesearch/bleve。对于复杂的文档,我不知道将 bleve 指向每个文档的“根”对象是否就足够了,或者您是否必须首先将其“展平”为一个简单的对象。 bleve 看起来是一个很酷的项目,所以我很想知道答案是什么。
  • 也许您可以展示一些您拥有的示例 XML?
  • @topskip 是的,我不知道我为什么不这样做。我已经用我的 XML 更新了这个问题。
  • @twotwotwo 你能告诉我一些如何做到这一点的例子吗?我已经发布了我的 XML 的样子。有多个 &lt;page&gt;&lt;/page&gt; 元素看起来像这样。
  • 对不起,我从未真正使用过encoding/xmlbleve;如果没有其他人出现回答,也许可以根据他们的文档中的示例开始与他们一起玩,等等,如果您遇到困难,请发布一个包含代码/预期行为/实际行为的问题。

标签: xml go bleve


【解决方案1】:

您将创建一个定义 XML 结构的结构。然后,您可以使用标准的“encoding/xml”包将 XML 解组到结构中。从那里你可以像往常一样使用 Bleve 索引结构。

http://play.golang.org/p/IZP4nrOotW

package main

import (
    "encoding/xml"
    "fmt"
)

type Page []struct {
    Title string `xml:"title"`
    Image string `xml:"image"`
    Text  string `xml:"text"`
    Facts []struct {
        Fact string `xml:"fact"`
    } `xml:"facts"`
}

func main() {
    xmlData := []byte(`<page>
    <title>Title here</title>
    <image>image url here</image>
    <text>A sentence of two about the topic</text>
    <facts>
        <fact>Fact 1</fact>
        <fact>Fact 2</fact>
        <fact>Fact 3</fact>
    </facts>
</page>`)

    inputStruct := &Page{}
    err := xml.Unmarshal(xmlData, inputStruct)
    if nil != err {
        fmt.Println("Error unmarshalling from XML.", err)
        return
    }

    fmt.Printf("%+v\n", inputStruct)
}

【讨论】:

  • 所以根据操场结果,结构看起来不错,只是它没有所有的事实。它只有事实 3,就像这样:Facts:[{Fact:Fact 3}]}] 首先,我希望它包含所有事实。但是,后来在现实中,我希望它具有基于 if 条件的某些事实。你能告诉我怎么做吗:如果 x == 1 显示第一个事实,或者如果 x == 2 显示结构中的第二个事实。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-21
  • 2013-06-18
  • 1970-01-01
  • 2022-10-07
  • 2018-09-27
相关资源
最近更新 更多