具有多个不同值的字段

时间:2008-12-30 22:47:22

标签: lucene

使用Lucene构建“图书搜索”API。 我需要索引Lucene索引中的Book Name,Author和Book category字段。

一本书可以归入多个不同的图书类别......例如:

BookName1 - 小说,幽默,哲学。 BookName1 - 小说,科学。 BookName1 - 哼哼,生意。 BookName4幽默 等等......

用户应该能够搜索特定类别下的所有书籍,并说“homour”。

鉴于这种情况,我如何索引上面的字段并在lucene中构建查询?

3 个答案:

答案 0 :(得分:32)

您可以多次出现Lucene文档的字段。创建文档,添加名称和作者的值,然后对每个类别执行相同的操作

  • 创建新的lucene文档
  • 添加名称字段和值
  • 添加作者字段和值
  • 每个类别:
    • 添加类别字段和值
  • 将文档添加到索引

当您在索引中搜索某个类别时,它将返回所有具有您所追求的值的类别字段的文档。该类别应为“关键字”字段。

我用英文写的,因为每个lucene版本的具体代码略有不同。

答案 1 :(得分:5)

您可以创建一个简单的“类别”字段,在该字段中列出按空格分隔的书籍的所有分类。

然后你可以搜索:

stock market AND category:(+"business")

或者,如果您想要搜索多个类别

stock market AND category:(+"business" +"philosophy")

答案 2 :(得分:4)

我会使用Solr - 它建立在Lucene上并由ASF管理,但是比Lucene更容易使用,特别是对于新手来说。

如果提供Lucene的几乎所有主要功能(当然,您所描述的项目所需的一切),以及快照,复制,模式等额外的东西......

在Solr中,您只需在schema.xml中定义要编制此类内容的字段:

<field name="book_id" type="string" indexed="true" stored="true" required="true" multiValued='false'/>
<field name="book_name" type="text" indexed="true" stored="true" required="true" multiValued='false' />
<field name="book_authors" type="text" indexed="true" stored="true" required="true" multiValued='true' />
<field name="book_categories" type="textTight" indexed="true" stored="true" required="true" multiValued='true' />

请注意,multiValued='true'属性可让您有效地将数组或列表传递给此字段,Solr可以很好地对其进行拆分和索引。

完成此操作后,启动Solr,您可以询问“book_authors:Hemingway”或“book_categories:Romance book_categories:Mills”等问题。

有几个预编写和配置的查询处理程序可以解析复杂查询(模糊匹配,布尔运算,评分提升......等),并且当Solr的API通过HTTP公开时,所有这些都被包装由许多客户端库,因此您不需要自己处理制作查询的低级细节。

他们的网站上有很多great documentation可以帮助您入门。