我试图获取搜索字词的自动建议。但是我遇到了一个问题,其中的单词包含" - "和"&"只在一个角色之后被拆分。
示例:
/solr/terms/?terms=true&terms.fl=item&terms.limit=10&terms.sort=count&terms.prefix=t
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">1</int>
</lst>
<lst name="terms">
<lst name="item">
<int name="top">11335</int>
<int name="tshirt">10249</int>
<int name="t">10156</int>
<int name="trouser">4771</int>
<int name="tight">1577</int>
</lst>
</lst>
</response>
问题在于 tshirt 和 t 。 &#34; T&#34;只出现在&#34; T恤&#34;内。那么如果在一个字符之后没有空格,如何阻止Solr分裂单词呢? &#34; t恤&#34;应该拆分 - &#34; T恤&#34;和&#34; h&amp; m&#34;不应该。
感谢您的帮助!
答案 0 :(得分:3)
项目的字段类型似乎是文本,其中WordDelimiterFilterFactory是分析中的过滤器之一 默认情况下,WordDelimiterFilterFactory将在Intra字分隔符上拆分 所以T恤会生成两个代币和衬衫,因此t出现在你身上。
如果您想使用autosuggest的术语,请根据要求删除或调整WordDelimiterFilterFactory。
您可以将TextField与基本配置一起使用,例如使用WhitespaceTokenizerFactory,并在其上应用较低的ascii折叠过滤器,以便最少分析标记并且不会出现碎片。
答案 1 :(得分:2)
您还可以添加不想拆分的单词,方法是将它们添加到protwords.txt或映射到wdfftypes.txt中的某些字符,这样它们就不会用于拆分术语。
另请查看此链接以获取良好的AutoSuggester http://www.cominvent.com/2012/01/25/super-flexible-autocomplete-with-solr/
答案 2 :(得分:1)
如果这是你使用TermsComponent
提出自动建议的唯一问题,你得到的答案是完美的,但我想提出一个替代答案。
TermsComponent
快速且易于使用,但它有以下限制:
LowerCaseFilterFactory
并将单词Word
编入索引,则只会输入w
,而不是W
。在将查询提交给solr之前,您基本上需要注意降低查询,因为您无法对查询应用任何标记生成器或过滤器。根据您的要求,您可能需要考虑使用Solr制作自动建议的不同方法。 Different ways to make auto suggestions with Solr文章应该是有用的,以便做出正确的选择。