尝试从Solr中的搜索中获取不同的字段值

尝试从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=

我有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="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
    字段值的问题的任何其他解决方案

    听起来好像您正在尝试查找包含所需关键字页面的书籍列表。而且你不在乎具体的页面


    在这种情况下,您可能希望使用一组单独的文档来表示书籍(而不仅仅是页面),并使用来进行搜索。

    虽然我不关心具体的页面,但我需要从每本书中至少找到一页,并在其内容中找到关键字。