2017-01-09 39 views
0

我使用Apache Solr實現包含類似下面的實例文檔文件:如何查詢Solr?和修改Schema.xml的

文件1個:(標籤:頭脹痛,名稱:B)
文件2個:(標籤:胸痛,名稱:A)
文件3:(標籤:腿疼,名:C)

當我查詢 「leg pain」 ..我收到的所有文件響應。

如何獲得精確匹配,即只有「腿痛」配套文件。 截至目前我使用的字段中鍵入如下:字符串

我是否需要在架構文件中的任何改變?

+1

你可以發佈你solr查詢 –

+1

究竟是什麼類型的字段?如果它是_string_字段,則只會返回完全匹配。你的查詢是什麼樣的?你在使用通配符嗎? – MatsLindh

回答

0

這是因爲默認操作符(OR)當您搜索leg pain Solr搜索legpain作爲不同的單詞。具有兩個詞的文檔將在結果中位居前列。

對於精確匹配,使用PhraseQuery。在這種情況下使用雙引號"leg pain"搜索具有全部短語leg pain的文檔。

+0

謝謝我知道..是否有其他解決方案。但是當我只搜索「痛苦」時,我將不會收到任何文件回覆 –

+0

檢查solr管理員分析頁面。還要檢查停用詞過濾器。 – vinod

+0

我在stopwords.txt中添加了以下單詞:#I#have #the ...但它沒有過濾stopwords.txt中給出的停用詞怎麼辦?可以請提供stopword文件 –

0

對於精確匹配可以設置毫米(最小「應該」匹配)查詢分析器100%的參數在solrconfig.xml中 此規定,必須在查詢子句相匹配的最低數量。 或者您可以在請求時在查詢時覆蓋此參數(q.mm)

0

您正在尋找的是一種不同的相關機制,通過鄰近度來增強內容。使用eDismax,你正在尋找PFPS作爲相關Solr的Wiki解釋參數。例如,如果你在查詢一個域名爲標籤,您的查詢看起來像:

http://localhost:8983/solr/<YOUR_COLLECTION>/select?defType=edismax&q=head pain&pf=tags&ps=10 

在您的意見要求將返回結果。 特別PS(樂句邊坡)參數:

設置的查詢短語 單詞之間允許的其他詞的數量。如果爲零,那麼這是一個精確的詞組搜索。對於較大的 值,它可以像WITHIN或NEAR運算符那樣工作。事實上,slop是 的一個編輯距離,其中單位對應於 查詢短語不在位置的條件移動。

+0

我想提升任何東西。以及dismax和edismax如何工作。 –

+0

@Naveens eDismax是一個擴展的解析器,它提供了一組更廣泛的查詢選項。如果您有選擇,您更願意使用eDismax而不是您可能使用的DefaultQueryParser。即使你不想提升任何東西,接近度也是一種常用的相關機制,以實現你所尋找的東西,並提出解決方案。嘗試提供的查詢,你會發現這是事實。 – AR1

0

如果您正在使用SOLR verison 3,你可以試試下面的字段類型

<fieldType name="input_general" class="solr.TextField"> 
    <analyzer type="index"> 
     <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="([^a-zA-Z0-9])" replacement="" replace="all" /> 
     <tokenizer class="solr.KeywordTokenizerFactory" /> 
     <filter class="solr.LowerCaseFilterFactory" /> 
    </analyzer> 
    <analyzer type="query"> 
     <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="([^a-zA-Z0-9])" replacement="" replace="all" /> 
     <tokenizer class="solr.KeywordTokenizerFactory" /> 
     <filter class="solr.LowerCaseFilterFactory" /> 
    </analyzer> 
</fieldType> 

並改變長期定位是:

<field name="Tags" type="input_general" indexed="true" stored="true"/> 

所以,你會從輸入中的空格本身,它會返回你所需要的:

Exact Match Search;你可以嘗試q =標籤:「legpain」

+0

沒有必要將這個答案粘貼到多個問題中,因爲它實際上是從精確匹配中刪除準確性。 – MatsLindh

+0

這是不是gud解決方案... –

+0

這不是一個複製/粘貼的答案,這是他的場景需要相同的答案。 –