如果我搜索q = searchtext:* xxx *,它可以很好地工作,但是如果關鍵字有「 - 」(q = searchtext:* xxx-xx *),那麼它不會給出結果。在solr查詢中用特殊字符搜索通配符
複製searchtext字段中的所有字段,並在其上具有text_general字段類型。
模式:
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory" />
<filter class="solr.ASCIIFoldingFilterFactory" />
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<!-- in this example, we will only use synonyms at query time
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
-->
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.ReversedWildcardFilterFactory" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory" />
<filter class="solr.ASCIIFoldingFilterFactory" />
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" />
<filter class="solr.PorterStemFilterFactory" />
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
</fieldType>
谷歌搜索好幾個小時也沒有找到一個解決方案。
感謝有人能幫忙。
編輯:更改關鍵字標記生成器爲標準
您正在使用關鍵字標記器,它將整個字段按原樣處理(不會將文本分解爲更小的標記)。那麼q = searchtext:xxx應該不起作用,並且q = searchtext:xxx-xx將起作用,如果您有像xxx-xx這樣的文本。你能證實你的模式是正確的嗎? – skm
實際上使用標準Tokenizer,試過關鍵字Tokenizer,但它不能與搜索文本:xxxx,所以我把它回到標準。 –
使用標準標記器,文本xxx-xx將分解爲標記xxx和xx(打開 - )。然後你可以在xxx,xx上執行搜索。如果你想查詢xxx-xx,然後在你的中,你可以使用標準Tokenizer本身,但不能使用Keyword Tokenizer,因爲它會將xxx-xx視爲單個字段,而當索引將它分解爲xxx和xx 。參考檢查https://wiki.apache。org/solr/AnalyzersTokenizersTokenFilters –
skm