2

我正在尝试使用 Solr 的建议器组件实现搜索的自动完成功能。我想提出跨多个领域的建议。我有 2 个字段taxonomytag我想在建议中提供这些字段。例如,如果搜索查询是,neck那么它应该返回:

necklace
neckalce sets
pearl necklace
diamond necklace
pearl necklace sets
diamond necklace sets

wherenecklace是分类,pearl并且diamond是标签。

以下是我的 schema.xml:

<field name="suggestion" type="text_auto" indexed="true" stored="false" multiValued="false" />

<copyField source="taxonomy_name" dest="suggestion"/>
<copyField source="tag" dest="suggestion">

<fieldType name="text_auto" class="solr.TextField">
  <analyzer>
   <tokenizer class="solr.KeywordTokenizerFactory"/>
   <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

和我的 solrconfig.xml:

<searchComponent class="solr.SpellCheckComponent" name="suggest">
<lst name="spellchecker">
  <str name="name">suggest</str>
  <str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
  <str name="lookupImpl">org.apache.solr.spelling.suggest.tst.TSTLookup</str>
  <str name="field">suggestion</str>  <!-- the indexed field to derive suggestions from -->
  <float name="threshold">0.005</float>
  <str name="buildOnCommit">true</str>
</lst>
</searchComponent>


<requestHandler class="org.apache.solr.handler.component.SearchHandler" name="/suggest">
 <lst name="defaults">
   <str name="spellcheck">true</str>
   <str name="spellcheck.dictionary">suggest</str>
   <str name="spellcheck.onlyMorePopular">true</str>
   <str name="spellcheck.count">5</str>
   <str name="spellcheck.collate">true</str>
 </lst>
 <arr name="components">
   <str>suggest</str>
 </arr>
</requestHandler>

但这会返回:

necklace
necklace sets

我怎样才能解决这个问题。我也尝试过使用:

<fieldType name="text_auto" class="solr.TextField"> 
  <analyzer> 
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
    <filter class="solr.ShingleFilterFactory" maxShingleSize="2" outputUnigrams="false"/>
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
  </analyzer> 
</fieldType> 

但这仅返回necklace sets

4

3 回答 3

1

SolR 中的自动完成功能仅在查询是第一个单词时才有效。

如果查询是“neck”,则自动完成应返回以“neck”开头的术语。它不能返回“珍珠项链”,因为“珍珠”在您的查询之前。

检查此链接以获取可能的解决方案:http: //www.cominvent.com/2012/01/25/super-flexible-autocomplete-with-solr/

于 2013-11-27T12:09:19.103 回答
1

将此添加到<searchHandler>

<str name="lookupImpl">AnalyzingInfixLookupFactory</str>

这也将使您能够进行搜索pearl necklace,因为它可以识别单词/短语/字段中间的文本。

于 2016-02-24T07:16:56.207 回答
0

你试过了吗 ?

<fieldType name="text_auto" class="solr.TextField"
positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.UAX29URLEmailTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true"
words="stopwords.txt" enablePositionIncrements="true" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
</analyzer>
</fieldType>
于 2013-11-27T00:02:14.560 回答