建议者(自动完成)使用Solr的n元语法搜索(一个排序规则建议者组件)(Suggester(Auto

2019-07-31 06:30发布

进出口工作在自动完成搜索使用Solr使用EdgeNGrams.I使用Solr的3.3,我想用排序规则的建议者为多字词的搜索自动完成一个解决方案。 不幸的是建议者只返回一个校对的多字词的搜索

如果用户正在搜索的员工姓名,然后自动完成应适用。 即,要像谷歌的搜索结果。 它的工作对我罚款下面的配置。

schema.xml中

<fieldType name="edgytext" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
    <analyzer type="index">
      <tokenizer class="solr.KeywordTokenizerFactory" />
      <filter class="solr.LowerCaseFilterFactory" /> 
  <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
  </analyzer>
<analyzer type="query">
 <tokenizer class="solr.KeywordTokenizerFactory" /> 
 <filter class="solr.LowerCaseFilterFactory" />
 <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="15" side="front" />    
</analyzer>

<field name="title" type="edgytext" indexed="true" stored="true" omitNorms="true" omitTermFreqAndPositions="true"/>
<field name="empname" type="edgytext" indexed="true" stored="true" omitNorms="true" omitTermFreqAndPositions="true" />

<field name="autocomplete_text" type="edgytext" indexed="true" stored="false"  multiValued="true" omitNorms="true" omitTermFreqAndPositions="false" />
<copyField source="empname" dest="autocomplete_text"/>

<copyField source="title" dest="autocomplete_text"/> 

网址:HTTP $://本地:8080 /测试/提示/ Q =迈克尔

   Result :
   <?xml version="1.0" encoding="UTF-8" ?> 
<response>
<lst name="responseHeader">
<int name="status">0</int> 
<int name="QTime">1</int> 
</lst>
<result name="response" numFound="0" start="0" /> 
<lst name="spellcheck">
<lst name="suggestions">
<lst name="michael">
<int name="numFound">9</int> 
<int name="startOffset">0</int> 
<int name="endOffset">7</int> 
<arr name="suggestion">
  <str>michael bolton</str> 
  <str>michael foret</str> 
  <str>michael force</str>
  <str>michael w. smith featuring andrae crouch</str> 
</arr>
</lst>
<str name="collation">michael bolton</str> 
</lst>
</lst>
</response>

它的工作对我罚款。 当IM与“迈克尔·F”,得到回应像下面搜索。 (HTTP://本地:8080 /测试/建议/ Q =迈克尔F)

回应:

 <?xml version="1.0" encoding="UTF-8" ?> 
 <response>
 <lst name="responseHeader">
 <int name="status">0</int> 
 <int name="QTime">1</int> 
 </lst>
 <result name="response" numFound="0" start="0" /> 
<lst name="spellcheck">
<lst name="suggestions">
<lst name="michael">
<int name="numFound">9</int> 
<int name="startOffset">0</int> 
<int name="endOffset">7</int> 
<arr name="suggestion">
  <str>michael bolton</str> 
  <str>michael foret</str> 
  <str>michael force</str> 
  <str>michael w. smith featuring andrae crouch</str> 
   .....
</arr>
</lst>
<lst name="f">
<int name="numFound">10</int> 
<int name="startOffset">8</int> 
<int name="endOffset">9</int> 
<arr name="suggestion">
  <str>f**k the facts</str> 
  <str>fairest lord jesus</str> 
  <str>franz ferdinand</str> 
  <str>françois rauber</str> 
  .........
</arr>
</lst>
<str name="collation">michael bolton f**k the facts</str> 
</lst>
</lst>
</response>.

所以,当我用“迈克尔·F”进行搜索,那么,我应该得到“迈克尔FORET”和“迈克尔·力”而已。 进来的数据以“f”开始。 请给我建议,如果有什么不对,在我的Solr的配置设置。

提前致谢,

阿尼尔。

文章来源: Suggester(Auto completion) search in solr using NGrams (one collation for Suggester Component)