Solr 6.4.2,以字符串开头过滤文档



如何按以字符串开头的字段过滤文档?现在我正在获取字段包含以此字符串开头的单词的所有文档。最好的结果是,如果有人回答如何首先从结果开始,然后保留,就像按最接近过滤器的排序一样。谢谢。
喜欢:

company_name:(最大*(结果 : ['最小和最大', '最大速度', '米兰娜最大鹦鹉']

但我想要它像:

company_name:(最大*(结果 : ["最大速度", "最小和最大", "米兰娜最大鹦鹉"]

现在我有这个文本字段的配置:

     <fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt" />
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.EnglishPossessiveFilterFactory"/>
        <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
        <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="15" />
        <filter class="solr.PorterStemFilterFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.EnglishPossessiveFilterFactory"/>
        <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
        <filter class="solr.EnglishMinimalStemFilterFactory"/>
         <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="15" />
        <filter class="solr.PorterStemFilterFactory"/>
      </analyzer>
    </fieldType>

您必须使用 string 字段(实现为 StrField (或带有 KeywordTokenizerTextField作为分词器类。

这样做的原因是通配符匹配是针对令牌执行的,当字符串拆分为多个令牌时,每个令牌将匹配通配符。string类将整个字符串保留为单个标记,而 KeywordTokenizer 执行相同的操作 - 但使用 KeywordTokenizer 允许您指定其他过滤器来处理字符串,例如在存储令牌之前将字符串小写。

如果你使用的是 EdgeNGrams,你不需要在查询中给出 *。你只需要给出你的前缀。此外,EdgeNGram 应该只在索引配置中,而不在查询配置中。目前,您基本上是说前 3 个字符匹配,而不管其余字符如何

我建议您修复这两件事并重试(重新加载,但无需重新索引,因为索引管道没有更改(。

最新更新