2016-09-15 54 views
0

我在考慮從Sphinx到箱子的遷移,但我找不到全文查詢語法的任何文檔。在獅身人面像我可以搜索:箱子全文查詢語法

("black cat" -catalog) | (awesome creature) 

這表示無論是確切的短語「黑貓」,並在文件沒有術語「目錄」或兩者「真棒」和文件「生物」在任何位置

black << big << cat 

這就要求文檔要包含所有「黑色」,「大」和「貓」兩個詞,並且要求「黑色」的匹配位置小於「大」的匹配位置等等。

而且我需要在文檔中的特定位置進行搜索。在獅身人面像我能使用鄰近運算符如下

hello NEAR/10 (mother|father -dear) 

這需要的文件,從「你好」,也術語「親愛的包含最多「你好」一詞和「媽媽」或「爸爸」一詞10項遠「一定不能比」你好「要接近10個詞條

NEAR的最後一個構造在我的應用程序中被大量使用。這是所有可能的箱子?

回答

0

可惜我不能在如何比較獅身人面像評論,但我會堅持你的問題:)

Crate's fulltext搜索帶有SQL和Lucene的匹配功率,因此應該能夠處理複雜的查詢。我只是提供匹配你的輸出的查詢,我認爲它應該是非常可讀的。

(「black cat」-catalog)| (真棒生物)

select * 
from mytable 
where 
    (match(indexed_column, 'black cat') using phrase 
    and not match(indexed_column, 'catalog')) 
    or match(indexed_column, 'awesome creature') using best_fields with (operator='and'); 

黑< <大< <貓

select * 
from mytable 
where 
    match(indexed_column, 'black big cat') using phrase with (slob=100000); 

這是一個棘手,似乎沒有成爲一個操作員不完全一樣就像獅身人面像一樣,但它可以通過「slop」值進行調整。根據不同的使用情況下,有可能是另一個(更好)的解決方案,以及...

你好NEAR/10(母親|父親-dear)

select * 
from mytable 
where 
    (match(indexed_column, 'hello mother') using phrase with (slop=10) 
    or match(indexed_column, 'hello father') using phrase with (slop = 10)) 
    and not match(indexed_column, 'hello dear') using phrase with (slop = 10) 

他們看起來有點笨重相比獅身人面像的語言,但他們工作的優良:)

在性能方面,他們仍然應該是超級快,這得益於Lucene的..

乾杯,克勞斯