2012-07-06 161 views
2

當使用SOLR 4.0進行搜索並嘗試進行短語查詢時,我遇到了一些小問題。SOLR短語查詢

我有一個名爲「idx_text_general_ci」的字段,它是由所有字段組成的不區分大小寫(所有小寫字母)字段。

當我嘗試和搜索短語(船舶鉗工)我SOLR拒絕搜索短語,而不是分裂的短語,2個字 - 以下

/select?defType=edismax&q=idx_text_general_ci:marine%20fitter&debugQuery=true 

debugQuery =真正的輸出:

<lst name="debug"> 
<str name="rawquerystring">idx_text_general_ci:marine fitter</str> 
<str name="querystring">idx_text_general_ci:marine fitter</str> 
<str name="parsedquery"> 
(+(idx_text_general_ci:marine DisjunctionMaxQuery((id:fitter))))/no_coord 
</str> 
<str name="parsedquery_toString">+(idx_text_general_ci:marine (id:fitter))</str> 

正如你在上面看到的,它將查詢分成2部分(idx_text_general_ci:marine然後id:fitter)。

我遇到的問題是我的idx_text_general_ci字段中出現了兩次「海洋鉗工」,但它的分數低於出現3次出現單詞「marine」的文檔的排名。我知道,如果我的SOLR用預期的短語搜索字段,情況就不會如此。

如果我用引號將短語換行,我會得到零結果。

任何幫助或在正確的方向微調將不勝感激。

在此先感謝

亞歷

回答

2

這裏發生的事情是,你的默認查詢字段似乎是id,因爲你指定你的查詢作爲

idx_text_general_ci:marine fitter 

它得到翻譯Solr作爲idx_text_general_ci:marineid:fitter的DisjunctionMaxQuery。據推測,你想要idx_text_general_ci:marineidx_text_general_ci:fitter。你有兩個選擇:1)你可以用正確的字段後跟冒號前綴每個單詞,或者你可以將schema.xml中的defaultSearchField更改爲idx_text_general_ci

我很困惑,爲什麼你把它換成雙引號時得到零結果。但是做以上這些應該可以幫到你。

+0

嗨。我剛剛嘗試過,但它也不起作用。 查詢(S)我試過低於>>> Q = idx_text_general_ci:海洋+ idx_text_general_ci:鉗工 和 Q = idx_text_general_ci:海洋%20idx_text_general_ci:鉗工 這些是做正確的方法是什麼? – Alex 2012-07-06 09:28:33

+0

你可以在Solr管理面板中試試這個嗎?在那裏調試要容易得多。如果您直接在瀏覽器欄中輸入,請使用「+」號而不是空格。 – Ansari 2012-07-06 09:32:57

+0

@Alex在管理面板中,您可以使用「分析」選項卡輸入文檔的一部分並查看該文檔的索引,然後輸入查詢並查看處理過程。檢查調試框,你應該能夠找出不匹配的地方。 – Ansari 2012-07-06 09:40:04