按字段分组的Solr结果(但基于分面的分组)

时间:2016-11-01 09:24:02

标签: solr autocomplete lucene facet autosuggest

我使用Apache Lucene Solr来索引和搜索数据。在这里,我尝试构建自动完成操作:

我有文件,例如人。让我们说一个人在文档,身份证,姓名,工作,国籍的某些领域被描述。 (Nick Fury,博士,英语/ John Dock,教师,多米尼加/ Jim Tyson,码头工人,波兰语)。当我写"做"我们希望建议如下:

---工作(标签)

医生

Dock Worker

---国籍(标签)

多明尼加

---姓名(标签)

John Dock

所以,我们想要一些类似于建议者的东西,我试过它,但结果根据匹配的字段分组,总是有一定的顺序:首先匹配的工作,然后是国籍,如果存在....,如果可能的话,里面我们可以按计数或相关性对类别进行排序。

然后,我尝试了3个方面。但是,我无法找到如何分组方面,以便将工作,国籍......分组在一起。

有没有办法做到这一点?在solr irc中,有些人回答说我必须使用2个查询。我怎么能这样做?

类似于http://www.cominvent.com/2012/01/25/super-flexible-autocomplete-with-solr/,但在那里,只搜索了一个字段,然后按类别进行分组。在我的例子中,情况就是这样,输入" co"返回:

---类别

国家

---国家和地区城市

哥伦比亚

哥斯达黎加 ...

1 个答案:

答案 0 :(得分:0)

您可以为“建议”组件中的每个字段创建不同的建议器:

<searchComponent name="suggest" class="solr.SuggestComponent">
   <lst name="suggester">
      <str name="name">job</str>
      <str name="field">job</str>
      ...
   </lst>
<lst name="suggester">
      <str name="name">nationality</str>
      <str name="field">nationality</str>
      ...
   </lst>
</searchComponent>

(你可以添加更多建议......)

然后是一个“/ suggest”请求处理程序:

<requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy">
  <lst name="defaults">
      <str name="echoParams">all</str>
      <str name="wt">json</str>
      <str name="indent">false</str>
    <str name="suggest">true</str>
    <str name="suggest.count">10</str>
  </lst>
  <arr name="components">
    <str>suggest</str>
  </arr>
</requestHandler>

然后在客户端:

http://localhost:8983/solr/collection1/suggest?suggest.q=co&suggest.dictionary=job&suggest.dictionary=nationality