2013-04-23 71 views
0

我有以下情況。假設我有一張這樣的大桌子。Solr:如何實現這個邏輯?

Id(unique)  returnMe    desc      name   value 
1    user1   all those living in usa  country   USA 
2.    user2   all those like game   game    football 
3.    user1   my hobbies are     hobby    guitar 

現在,我如何得到結果(returnMe)以下查詢。

1. For all those users who live in usa AND like guitar 
2. For all those users who live in usa OR like guitar. 

請不要修改查詢。

對於我的solConfig.xml'desc','name','value'是可搜索的可索引字段。

感謝您的任何幫助。

好吧,我編輯這個解釋我的邏輯..

Step 1: Break query on AND like (live in USA) AND (like guitar) 
Step 2: Then select returnMes from first query and returnMes from second query. 
Step 3: Take common returnMes, returned from first query and second query. 

有什麼辦法可以Solr的做到這一點。我們可以通過Solr「join」還是其他方式來完成? 我確實想在我的PHP中這樣做,這將是巨大的開銷。

回答

0

您將需要以某種方式修改查詢。一個簡單的步驟來解析查詢併爲其添加括號,並可能需要字段名稱進行搜索。你可以合理地輕鬆地將這些查詢到的東西,如:

(For all those users who live in usa) AND (like guitar) 
(For all those users who live in usa) OR (like guitar) 

或者你可以切出「爲所有那些誰的用戶」,並有簡單:

(live in usa) AND (like guitar) 
(live in usa) OR (like guitar) 

和查詢字段設置爲value。當然,如果您的文檔是value=users或者其他類似的文檔,您可能會遇到問題,因爲它會搜索value字段中的每個字詞。

如果你確實想用自然語言工作,那麼你可以看看OpenNLP項目。

+0

嘿感謝您的建議。我已經編輯了一些問題來解釋我的邏輯。你可以請看看這個來幫助我。 – voila 2013-04-24 04:12:18

+0

爲什麼要手動合併結果? Solr查詢解析器支持布爾邏輯。爲什麼不通過查詢'(住在美國)和(如吉他)' – femtoRgon 2013-04-24 14:03:46

+0

因爲'AND'試圖找到(住在美國)和(如吉他)文件明智(兩個查詢都應該出現在文件中)。例如 - 如果我只是在上面的表上做AND,那麼我不會得到任何結果,因爲沒有任何文檔滿足這兩個查詢。但我的要求是獲得「用戶1」查詢「住在美國和業餘愛好是吉他」..任何解決方案。我堅持:( – voila 2013-04-24 17:33:55