Мне нужно создать алгоритм, который позволит мне использовать неопределенный (регулярное выражение) поиск в сфинксе.
Например: мне нужно найти фразу, которая содержит неопределенные символы: «2x4» может выглядеть как «2x4» или «2 * 4» или «2-4».
Я хочу сделать что-то вроде этого: «2 (x | * | -) 4». Но если я попытаюсь использовать эту конструкцию в запросе, sphinx разделит ее на три слова: «2», «(x | * | -)» и «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
Как уродливый хак, я могу сделать что-то вроде (2x4) | (2 * 4) | (2-4), но это не очень хорошее решение, если я получу большую фразу, например "2x4x2.2", и мне нужно "2 ( х | * | -) 4 (х | * | -) 2 (|..,) 2"
Я могу использовать опцию "charset_table", чтобы определить "*> x", "-> x", ",>." и так далее, но это не гибкое решение.
Можете ли вы найти лучшее решение?
ps: простите за мой английский =)