2016-09-15 6 views
0

Я думаю о миграции из Sphinx в Crate, но я не могу найти никакой документации для синтаксиса полного текста. В Sphinx я могу найти:Синтаксис полнотекстового запроса Crate

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

это означает ОБЕИМ точную фразу «черная кошка» и без термина «каталог» в документе ИЛИ как «удивительный» и «существо» в любом месте в документе

black << big << cat 

Для этого требуется, чтобы документ содержал все «черные», «большие» и «кошачьи» термины, а также требует, чтобы позиция соответствия «черного» была меньше, чем позиция соответствия «большой» и т. Д.

И мне нужно найти конкретное место в документе. В сфинкса я был в состоянии использовать оператор близости следующим

hello NEAR/10 (mother|father -dear) 

это требует документ содержит «HELLO» термин и «мать» или «отец» срок не более 10 терминов от «привет», а также термин «дорогой «не должно быть ближе 10 терминов к« привет »

Последняя конструкция с NEAR сильно используется в моем приложении. Все ли возможно в Crate?

ответ

0

К сожалению, я не могу прокомментировать, как он сравнивает с Сфинксом, но я буду придерживаться ваших вопросов :)

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

< < черный большой < < кот

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) 

Они могут выглядеть немного неуклюжим по сравнению с языком Сфинкса, но они работают нормально :)

с точки зрения производительности, они все равно должны быть очень быстро, благодаря Lucene ..

Cheers, Клаус