尝试从Solr中的搜索中获取不同的字段值
我有Solr 4.10.0,并且为一些书籍执行了索引。schema文档是每本书的页面,因此每个文档都有PageID、BookID、PageNum、Content等字段。schema.xml中的字段定义如下所示:尝试从Solr中的搜索中获取不同的字段值,solr,lucene,solr4,Solr,Lucene,Solr4,我有Solr 4.10.0,并且为一些书籍执行了索引。schema文档是每本书的页面,因此每个文档都有PageID、BookID、PageNum、Content等字段。schema.xml中的字段定义如下所示: <field name="PageID" type="string" indexed="true" stored="true" required="true" multiValued="false" /> <field name="Content" type=
<field name="PageID" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="Content" type="text_ar" indexed="true" stored="true" required="true" termVectors="true" />
<field name="PageNum" type="int" indexed="false" stored="true" required="false" multiValued="false" />
<field name="Part" type="int" indexed="false" stored="true" required="false" multiValued="false" />
<field name="BookID" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="BookTitle" type="text_ar" indexed="true" stored="true" required="true" />
<field name="BookInfo" type="text_ar" indexed="true" stored="true" required="true" />
<field name="BookCat" type="int" indexed="false" stored="true" required="false" multiValued="false" />
问题
当我尝试搜索包含页面文本的字段Content
时,我将从同一本书中得到多个结果。很明显,这是意料之中的,因为在一本书的许多页中都可以找到某个词。我尝试使SQL与以下查询类似:
<field name="PageID" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="Content" type="text_ar" indexed="true" stored="true" required="true" termVectors="true" />
<field name="PageNum" type="int" indexed="false" stored="true" required="false" multiValued="false" />
<field name="Part" type="int" indexed="false" stored="true" required="false" multiValued="false" />
<field name="BookID" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="BookTitle" type="text_ar" indexed="true" stored="true" required="true" />
<field name="BookInfo" type="text_ar" indexed="true" stored="true" required="true" />
<field name="BookCat" type="int" indexed="false" stored="true" required="false" multiValued="false" />
使用facet
http://localhost:8080/solr/books/select/?q=Content:WordOfSearch&sort=PageID%20desc&version=2.2&start=0&rows=10&indent=on&wt=json&facet=on&facet.field=BookID&facet.limit=1&hl=true&hl.q=Content:WordOfSearch
在上一个查询中,我设置了facet.field=BookID
,以使结果只有一个具有相同书籍的结果。但是,此解决方案不能按预期工作,它返回的结果与未使用的facet
类似。i、 e使用或不使用方面没有变化
使用group
时,我使用了参数main
和参数main,如下所示:
<field name="PageID" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="Content" type="text_ar" indexed="true" stored="true" required="true" termVectors="true" />
<field name="PageNum" type="int" indexed="false" stored="true" required="false" multiValued="false" />
<field name="Part" type="int" indexed="false" stored="true" required="false" multiValued="false" />
<field name="BookID" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="BookTitle" type="text_ar" indexed="true" stored="true" required="true" />
<field name="BookInfo" type="text_ar" indexed="true" stored="true" required="true" />
<field name="BookCat" type="int" indexed="false" stored="true" required="false" multiValued="false" />
http://localhost:8080/solr/books/select/?q=Content:WordOfSearch&sort=PageID%20desc&version=2.2&start=0&rows=10&indent=on&wt=json&group=true&group.field=BookID&group.main=true&hl=true&hl.fl=*&hl.simple.pre=&hl.simple.post=
小组
部分解决了这个问题。i、 从包含WordOfSearch的每本书的内容(页面)返回一个结果。但是,它破坏了我在应用程序中进行的分页。在应用程序中,我依靠response:numFound
来维护总记录。在我使用的group
解决方案中,它返回的numFound
等于不带group的查询的数目。i、 e它返回具有重复BookID
值的文档数,因此在最后一次分页时会导致出现空页。因此,我如何才能获得使用组返回的文档的确切数量?
或针对重复使用BookID
字段值的问题的任何其他解决方案 听起来好像您正在尝试查找包含所需关键字页面的书籍列表。而且你不在乎具体的页面
在这种情况下,您可能希望使用一组单独的文档来表示书籍(而不仅仅是页面),并使用来进行搜索。虽然我不关心具体的页面,但我需要从每本书中至少找到一页,并在其内容中找到关键字。