Apache Solr TermsComponent:如何防止在一个字符后拆分单词。例如,“在;t恤衫;

Apache Solr TermsComponent:如何防止在一个字符后拆分单词。例如,“在;t恤衫;,solr,split,character,word,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&l

我正在尝试获取搜索词的自动建议。但我遇到了一个问题,即包含“-”和“&”等字符的单词只在一个字符后被拆分

例如:

/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>
/solr/terms/?terms=true&terms.fl=item&terms.limit=10&terms.sort=count&terms.prefix=t
0
1.
11335
10249
10156
4771
1577
问题在于tshirtt。“t”仅出现在“t恤”中。那么,如果一个字符后面没有空格,我如何防止Solr在一个字符后面拆分单词呢。“t恤”应该分开——“t恤”和“h&m”不应该分开


谢谢你的帮助

项目的字段类型似乎是文本,是分析中的过滤器之一。
默认情况下,WordDelimiterFilterFactory将在字内分隔符上拆分。
因此,t恤将生成两个标记t和shirt,因此术语t为您出现

如果要将术语用于autosuggest,请根据需要删除或调整WordDelimiterFilterFactory。

您可以将TextField与基本配置一起使用,如WhitespaceTokenizerFactory,并在其上应用较低的ascii折叠过滤器,以便标记的分析最少,并且不会出现碎片

如果这是您在使用
术语组件
进行自动建议时遇到的唯一问题,那么您得到的答案是完美的,但我想提出一个替代答案

TermsComponent
快速且易于使用,但它有以下限制:

  • 您不能对您的建议应用任何筛选器
  • 您可能在区分大小写的查询中遇到问题:例如,如果您使用
    小写筛选器工厂
    并为单词
    word
    编制索引,您只会得到键入
    w
    而不是
    w
    的建议。您基本上需要在将查询提交给solr之前降低查询,因为您不能对查询应用任何标记器或过滤器

根据您的需求,您可能需要考虑用SOLR进行自动建议的不同方法。为了做出正确的选择,这篇文章应该很有用。

您也可以通过将不希望拆分的单词添加到protwords.txt或将某些字符映射到wdfftypes.txt中来添加它们,这样它们就不会被用于拆分单词


另外,请查看此链接以了解良好的AutoSuggester

BTW,规则如何适用于“AT&T”和“O(n)”呢?