从Solr Suggester返回单个单词

从Solr Suggester返回单个单词,solr,autocomplete,solr-schema,solrconfig,Solr,Autocomplete,Solr Schema,Solrconfig,我正在开发一个web应用程序,并使用Solr作为搜索引擎。我想添加自动完成功能。为此,我添加了Suggester组件,并为其配置了一个单独的字段。这样行 问题是Suggester返回字段的整个值。例如,如果一篇文章的名称是“有新闻价值的项目”,我搜索“新”,它将返回整个“有新闻价值的项目”,我希望它只返回“有新闻价值”。换句话说,返回单个单词标记 架构如下所示: <fieldType name="text_autocomplete" class="solr.TextField" posit

我正在开发一个web应用程序,并使用Solr作为搜索引擎。我想添加自动完成功能。为此,我添加了Suggester组件,并为其配置了一个单独的字段。这样行

问题是Suggester返回字段的整个值。例如,如果一篇文章的名称是“有新闻价值的项目”,我搜索“新”,它将返回整个“有新闻价值的项目”,我希望它只返回“有新闻价值”。换句话说,返回单个单词标记

架构如下所示:

<fieldType name="text_autocomplete" class="solr.TextField" positionIncrementGap="100">
  <analyzer>
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

<field name="term" type="text_autocomplete" indexed="true" stored="true" multiValued="false" />
<field name="weight" type="float" indexed="true" stored="true" />

<copyField source="name" dest="term"/>

这些值将复制到“术语”字段中。Solr配置:

<!-- Search component -->
<searchComponent name="suggest" class="solr.SuggestComponent">
  <lst name="suggester">
    <str name="name">suggester</str>
    <str name="lookupImpl">AnalyzingLookupFactory</str>
    <str name="dictionaryImpl">DocumentDictionaryFactory</str>
    <str name="field">term</str>
    <str name="weightField">weight</str>
    <str name="suggestAnalyzerFieldType">text_autocomplete</str>
    <str name="buildOnStartup">false</str>
  </lst>
</searchComponent>

<!-- Search handler -->
<requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy">
  <lst name="defaults">
    <str name="suggest">true</str>
    <str name="suggest.count">10</str>
    <str name="suggest.dictionary">suggester</str>
    <str name="suggest.build">true</str>
  </lst>
  <arr name="components">
    <str>suggest</str>
  </arr>
</requestHandler>

建议者
分析格洛库普工厂
文档字典工厂
学期
重量
文本自动完成
假的
真的
10
建议者
真的
建议

有人能建议一个模式和/或配置,让建议者返回一个单词吗

尝试使用solr.SpellCheckComponent代替solr.SuggestComponent。 AsSuggestComponent的意思是暗示整个短语。 您可以在这里查看solr.SpellCheckComponent的详细信息

为了给你快速的参考,你可以试试这个

<searchComponent name="suggest" class="solr.SpellCheckComponent">
<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.fst.FSTLookupFactory</str>
    <str name="distanceMeasure">org.apache.lucene.search.spell.JaroWinklerDistance</str>
    <str name="field">term</str>
    <str name="accuracy">0.7</str>
    <float name="thresholdTokenFrequency">.0001</float>

</lst>
</searchComponent>

建议
org.apache.solr.spelling.Suggester
org.apache.solr.spelling.suggest.fst.fstlookupffactory
org.apache.lucene.search.spell.JaroWinklerDistance
学期
0.7
.0001