Crate全文查询语法

时间:2016-09-15 13:32:04

标签: full-text-search sphinx crate

我正考虑从Sphinx迁移到Crate,但我无法找到全文查询语法的任何文档。在Sphinx我可以搜索:

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

这代表完全相同的短语"黑猫"并且没有术语"目录"在文件中或两者都很棒" awesome"和"生物"在文件中的任何位置

black << big << cat

这要求文件包含所有&#34; black&#34;,&#34; big&#34;和&#34; cat&#34;术语也需要匹配位置&#34; black&#34;低于#34; big&#34;的匹配位置等等。

我需要搜索文档中的特定位置。在sphinx中我能够使用接近算子如下

hello NEAR/10 (mother|father -dear)

这要求文件包含&#34;你好&#34;期限和&#34;母亲&#34;或者&#34;父亲&#34;任期最多10个学期,你好&#34;你好&#34;还有术语&#34;亲爱的&#34;不得超过10个术语至&#34;你好&#34;

NEAR的最后一个构造在我的应用程序中被大量使用。在箱子里一切都可能吗?

1 个答案:

答案 0 :(得分:0)

不幸的是我无法评论它与Sphinx的比较,但我会坚持你的问题:)

Crate's fulltext搜索带有SQL和Lucene的匹配能力,因此应该能够处理复杂的查询。我将提供与您的输出匹配的查询,我认为它应该是非常易读的。

  

(“黑猫” - 目录)| (很棒的生物)

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');
  

黑色&lt;&lt;大&lt;&lt;猫

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

这个很棘手,似乎没有一个操作符与Sphinx完全相同,但它可以用“slop”值进行调整。根据用例,可能还有另一个(更好的)解决方案......

  

你好NEAR / 10(母亲 - 父亲 - 亲爱的)

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)

与Sphinx的语言相比,它们可能看起来有点笨重,但它们工作得很好:)

性能方面,由于Lucene,它们应该仍然超级快......

干杯,克劳斯