Apache Solr TermsComponent:如何防止在一个字符后分割单词。例如。 “T恤”

时间:2012-02-18 12:21:07

标签: solr split character word

我试图获取搜索字词的自动建议。但是我遇到了一个问题,其中的单词包含" - "和"&"只在一个角色之后被拆分。

示例:

/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;不应该。

感谢您的帮助!

3 个答案:

答案 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文章应该是有用的,以便做出正确的选择。