Crate全文查询语法



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

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

这代表文档中确切的短语"黑猫"而没有术语"目录",或者文档中任何位置都有"awesome"one_answers"creature"

black << big << cat

这要求文档包含所有"black","big"one_answers"cat"术语,并且还要求"black"的匹配位置小于"big"的匹配位置,等等。

我需要在文档中的特定位置进行搜索。在sphinx中,我可以使用接近操作符,如下所示

hello NEAR/10 (mother|father -dear)

这要求文档包含"hello"术语和"mother"或"father"术语,距离"hello"最多10个术语,而且术语"dear"与"hello"的距离不得超过10个术语

最后一个带有NEAR的结构在我的应用程序中大量使用。在Crate中这一切都是可能的吗?

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

Crate的全文搜索带有SQL和Lucene的匹配能力,因此应该能够处理复杂的查询。我只提供查询匹配您的输出,我认为它应该是相当可读的。

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

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完全相同,但它可以用"斜率"值进行调整。根据用例,可能还有另一个(更好的)解决方案…

hello NEAR/10 (mother|father -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)

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

性能方面,他们应该仍然是超级快,感谢Lucene..

欢呼,老人

相关内容

  • 没有找到相关文章

最新更新