我使用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"返回:
---类别
国家
洲
---国家和地区城市
哥伦比亚
哥斯达黎加 ...
答案 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