簡體   English   中英

Solr通配符搜索,中間有空格

[英]Solr wild card search with space in the middle

民間,

我們想做一個Solr通配符搜索,中間有空格。

例如,如果我們搜索“ Please \\ Help *”,則它將檢索所有帶有“ Please Help”的文檔,然后檢索帶有“ Please”和“ Help”兩個詞的文檔。

我們看到如果搜索“ Please \\ Help *”,那么它只是返回具有“ Please Help”的文檔,而不返回對諸如“ Please”和“ help”之類的單個標記的搜索。

下面給出的是我們用於索引和搜索的字段定義

<fieldType name="string_ci" class="solr.TextField" sortMissingLast="true" omitNorms="true"> 
  <analyzer type="index">         
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.WordDelimiterFilterFactory"/>
    <filter class="solr.LengthFilterFactory" min="2" max="100"/>
    <filter class="solr.ShingleFilterFactory" maxShingleSize="2" outputUnigrams="true"/>
 </analyzer>  
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.ShingleFilterFactory" maxShingleSize="2" outputUnigrams="true"/>
  </analyzer>  
</fieldType>

使用通配符搜索時,不會調用查詢的分析階段。 這意味着“請幫助*”不會通過碎片過濾器等,因此不會產生任何點擊。

正如您對問題的評論中提到的那樣-在索引階段使用EdgeNgramFilter,然后以“請幫助”的身份提交查詢。 然后,它將檢索字段以“ Please help”開頭的所有文檔,因為它將創建同一令牌的多個版本(例如“ P”,“ Pl”,“ Ple”,“ Plea”,“ Pleas”,“請”,“請”,“請H”等)。

您必須調整過濾器的順序以匹配您的需求。

您還可以使用KeywordTokenizer將完整的輸入作為單個令牌索引(如果需要,可以使用LowercaseFilter進行索引),然后使用該索引將單個令牌與通配符搜索進行匹配(因為無需進行其他分析)地點)。

暫無
暫無

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

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