0

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

公司名称:(最大*)
结果 : ['Min & Max', '最大速度', 'Mirana max parrot']

但我希望它像:

公司名称:(最大*)
结果:['最大速度','Min&Max','Mirana max parrot']

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

     <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>
4

2 回答 2

0

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

我建议你修复这两个问题,然后重试(重新加载,但不需要重新索引,因为索引管道没有改变)。

于 2017-02-14T03:34:32.313 回答
0

您将不得不使用一个string字段(实现为StrField)或TextField带有 aKeywordTokenizer作为标记器类。

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

于 2017-02-13T15:44:30.480 回答