[英]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.