2016-02-16 56 views
0

Folk,按查詢順序查詢過濾器 - solr

我們想確保solr根據過濾順序查詢數據。

例如,如果輸入被賦予類似「請幫有人在這裏」,那麼首先就應該查詢基於以下數據(以下所有都在爲我們的5個不同的文件)

「請幫幫忙」 「幫助別人」 「有人在這裏」

然後通過

「請」 「幫助」 等

我們看到的Solr是採摘指數randoml y和搜索文件

例如如果我們搜索「請幫助這裏有人」,它正在打在哪個是,如「幫助需要」文本(這是在中間來,但應該是在底部)

<analyzer type="query"> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 

     <filter class="solr.ShingleFilterFactory" minShingleSize="2" maxShingleSize="4" outputUnigrams="false"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
    </analyzer> 

回答

0

指數爲兩個不同的文件字段,一個用於Shingle比賽(如你所定義的),一個用於自由文本比賽。通過使用qf=shinglefield^10 textfield,得分匹配程度會有所不同 - 因此,在shinglefield中的比賽將比普通文本字段中的比賽高出十倍。您需要根據自己的需要調整這些權重。

qf如果使用edismax或舊的dismax查詢解析器,則是有效的參數。

+0

我們如何才能索引字段上的帶狀皰疹(而非非本徵令牌)。在提供Shingle過濾器之前,似乎必須提供tokenizer。我們嘗試添加(KeywordTokenizerFactory,WhiteSpaceTokenizerFactory,StandardTokenizerFactory) –

+0

將unigrams設置爲false並且minGrams 2的ShingleFilterFactory不應該輸出任何只有單個值的令牌,據我所知。使用分析頁面確認設置是否正確。 – MatsLindh

+0

嗨感謝您的幫助我們正面臨更多的問題,我們希望我們的反應,以便結果將按以下順序出現1)「谷歌臉譜」2)「谷歌」3)「臉譜」,但似乎我們正在得到臉書在谷歌之前(與shinglefilerfactory我們得到'谷歌臉譜'作爲第一個文件感謝那樣)。 http://stackoverflow.com/questions/35532824/solr-nested-boosting-not-working-as-expected –