Мне нужно сделать алгоритм, который позволяет мне использовать неопределенный (регулярный) поиск в сфинксе.Использование regexp с sphinx
Например: мне нужно найти фразу, содержащую неопределенные символы: «2x4» может выглядеть «2x4» или «2 * 4» или «2-4».
Я хочу сделать что-то вроде этого: «2 (x | * | -) 4". Но если я пытаюсь использовать эту конструкцию в запросе, сфинкс разделить его на три слова: «2», «(х | * | -)» и «4»:
$ search -p "2x4"
...
index 'xxx': query '2x4 ': returned 25 matches of 25 total in 0.000 sec
...
words:
1. '2x4': 25 documents, 25 hits
$ search -p "2(x|y)4"
...
index 'xxx': query '2(x|y)4 ': returned 0 matches of 0 total in 0.000 sec
words:
1. '2': 816 documents, 842 hits
2. 'x': 21 documents, 21 hits
3. 'y': 0 documents, 0 hits
4. '4': 2953 documents, 3014 hits
Как уродливой халтура I кошки сделать что-то (2x4) | (2 * 4) | (2-4), но это нехорошее решение, если я получаю большую фразу типа «2x4x2.2» и вам нужно «2 (x | * | -) 4 (x | * | -) 2 (|.,) 2" .
Я могу использовать опцию «charset_table» для определения «*> x», «-> x», «,>». и так далее, но это не гибкое решение.
Можете ли вы найти лучшее решение?
пс: простите за мой английский =)
Принятый ответ не совсем правильно.Хотя RegEx не может использоваться во время поиска, его можно использовать при построении индекса. См. Мой ответ. –