2016-09-15 53 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的..

干杯,克劳斯