簡體   English   中英

Solr 6.4.2,使用字符串開頭過濾文檔

[英]Solr 6.4.2, filter documents with startswith string

如何按以某些字符串開頭的字段過濾文檔? 現在,我將獲取所有文檔,其中field包含以該字符串開頭的單詞。 最好的結果將是,如果有人回答如何首先准確地從結果開始,然后再保持下去,例如按最接近過濾器的順序進行排序。 謝謝。
喜歡:

company_name:(max*)
result : ['Min & Max', 'Maximum speed', 'Mirana max parrot']

但我想要這樣:

company_name:(max*)
result : ['Maximum speed', '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>

您將必須使用string字段(實現為StrField )或帶有KeywordTokenizerTextField作為令牌生成器類。

這樣做的原因是對標記執行通配符匹配,並且在將字符串拆分為多個標記時,每個標記都將與通配符匹配。 string類將整個字符串保留為單個令牌,而KeywordTokenizer則保持相同-但是使用KeywordTokenizer可以指定其他過濾器來處理字符串,例如在存儲令牌之前將字符串小寫。

如果使用EdgeNGrams,則無需在查詢中提供*。 您只需要提供前綴即可。 同樣,EdgeNGram應該僅處於索引配置中,而不應位於查詢之一中。 目前,您基本上是說按前3個字符進行匹配,而不考慮其余字符

我建議您修復這兩件事並重試(重新加載,但無需重新索引,因為索引管道沒有更改)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM