2015-07-21 59 views
1

林建設使用SOLR 5.2的應用程序,我需要這種類型的比賽:SOLR匹配短語(卵石FILTER)

,如果我有存儲字段名稱:」 BLA1 bla2‘和名稱:’bla2東西bla3「 當我查詢類似名稱的東西:」東西bla1 bla2東西bla3 bla4「 我需要它匹配兩個條款

所以我落得這樣做是定義這種類型的字段:

我使用關鍵字標記生成器爲索引

我用空白標記生成器和瓦濾波器查詢,所以我得到這樣的 「喇嘛TRA KLA ZLA CLA」 輸出 「BLA TRA」, 「喇嘛TRA科軍」, 「喇嘛TRA KLA ZLA」 .... ...

我已經嘗試過分析和shingling工作正常,但問題是當我執行我的查詢與真正的數據它似乎沒有找到匹配。

<fieldType name="shingleparse" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
<tokenizer class="solr.WhitespaceTokenizerFactory"/>  
<filter class="solr.ShingleFilterFactory" outputUnigrams="false" outputUnigramsIfNoShingles="true" minShingleSize="2" maxShingleSize="5"/> 
    </analyzer> 
</fieldType> 

<field name="name" type="shingleparse" indexed="true" stored="true" required="true" multiValued="false" /> 
+1

[關鍵詞標記生成器(https://cwiki.apache.org/confluence/display/solr/Tokenizers#Tokenizers-KeywordTokenizer)將整個文本字段作爲一個單一令牌。因此,當您將數據編入索引時,可以看到像單個標記'bla2 something bla3'。 – alexf

+0

這正是它應該如何處理,因爲例如,如果我查詢smth像「** bla2東西bla3 bla4 bla5 **」我會得到帶狀皰疹「** bla2東西**」,「** bla2東西bla3 * *「,...它應該匹配,但由於某種原因,它不會 – BrainOverflow

+0

因此,在您的示例中,**第一個**('bla1 bla2')匹配,而不是**第二個**('bla2 something bla3')? – alexf

回答

0

你可以檢查這是否符合你的要求。

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/> 
     <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 
+0

這不解決我的問題,如果我例如查詢確切的單詞「** bla1 bla2 **」它匹配,但如果我查詢名稱:「** bla1 bla2 ttttttt **」這不匹配,我想它匹配 – BrainOverflow

+0

它會匹配...檢查這些在分析頁面http://localhost/solr/admin/analysis.jsp –

+0

我試過第二個以及它匹配上述字段類型 –