2016-04-28 33 views
0

假設如果我在solr中搜索關鍵字IPL,我想要包含IPL和#IPL的結果。如何實現這一目標?在Solr中搜索同時包含標籤

我試過下面的索引和查詢中的WordDelimFactory,但沒有運行出 。

我想我必須將字符串拆分爲「字符串」和「#字符串」,但不知道該怎麼做。

回答

0

,如果你想每keryword搜索作爲#keyword那麼你可以嘗試使用OR運算符查詢就像

/select?q="IPL" OR "#IPL" 

如果你想在特定領域搜索,然後

/select?q=title:"IPL" OR title:"#IPL" 

你可以試試與同義詞。但在這種情況下,它只是#前綴。

轉到您的solr實例的配置文件。在conf文件夾內編輯synonyms .txt文件。

IPL => #IPL

OR

改變您的查詢字段標記者在Schema.xml文件,

<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
     <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"/> 
</analyzer> 
</fieldType> 

然後用字段名/select?q=text:#IPL

查詢,因爲在Solr的文本是默認你可以試試/select?q=#IPL

+0

我想這樣做所有的搜索關鍵字不只是IPL。如何在synonyms義的.txt中以這種方式進行配置? – Babu

+0

您的查詢字詞被標記。 solr.StandardTokenizerFactory將從您的關鍵字中刪除#。 – vinod

+0

正在使用whitespacefactory \t \t <過濾器類= 「solr.StopFilterFactory」 IGNORECASE = 「真」 的話= 「stopWords.txt中」 enablePositionIncrements = 「真」/> < filter class =「solr.LowerCaseFilterFactory」/> \t \t \t \t Babu

0

這是通過WordDelimiterFilterFactory完成的。設置generateWordParts=1.也保留preserveOriginal = 1。 這將保持原來的,並將創建新的沒有#。

修改schema.xml之後,重新啓動服務器並重新索引數據。

<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
<analyzer> 
<tokenizer class="solr.WhitespaceTokenizerFactory"/> 

     <filter class="solr.StopFilterFactory" 
       ignoreCase="true" 
       words="stopwords.txt" 
       enablePositionIncrements="true" 
       /> 
     <filter class="solr.WordDelimiterFilterFactory" 
       protected="protwords.txt" 
       generateWordParts="1" 
       generateNumberParts="1" 
       catenateWords="1" 
       catenateNumbers="1" 
       catenateAll="0" 
       splitOnCaseChange="0" 
       preserveOriginal="1"/> 
     <filter class="solr.LengthFilterFactory" min="2" max="100" /> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/> 
     <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 

     </analyzer> 
    </fieldType>