Используйте точный поиск с оператором OR внутри запроса Sphinx
Возможны различные варианты поиска с расширенным синтаксисом sphinx.
- Точный поиск: "Я люблю поесть" // будет соответствовать точной фразе
- ИЛИ поиск: (есть | спать | мечтать)
Можно ли их смешивать и строить запросы так:
"I love to (eat|sleep|dream)"
Я знаю, что это можно упростить и разделить условие ИЛИ на разные точные фразы, например:
"I love to eat" | "I love to sleep" | "I love to dream"
Но я планирую использовать много групп OR с большим количеством опций внутри, и расширение этого запроса приведет к огромному.
Так можно ли использовать синтаксис OR внутри синтаксиса точного соответствия в Sphinx?
1 ответ
Нет, невозможно использовать 'ИЛИ' в Операторе Фразы ("
вокруг слов, которые обеспечивают смежные слова) - правильное имя для того, что вы называете "точное соответствие".
Увы, нет другого объединенного оператора "строгого порядка" и "рядом" (т. Е. Нет оператора "непосредственно перед"). Таким образом, вы вынуждены использовать оба, так что-то вроде
("I love to" << (eat|sleep|dream)) NEAR/3 ("I love to" NEAR/1 (eat|sleep|dream))
Что не проще, и, как утверждают, является более сложным и запутанным! NEAR/3 в середине необходим, чтобы убедиться, что вы совпадаете с одним и тем же датчиком внутри документа (в противном случае существуют крайние случаи с ложными срабатываниями).
Идея "вне стен", если у вас много этих списков "ИЛИ", заключается в том, чтобы вместо того, чтобы реализовывать их в запросе, вместо этого используйте словоформы. Недостатком является то, что вам нужно знать их заранее (т.е. составлять в индекс), и "отказ" сложнее.