В поиске elasticsearch есть способ настроить анализатор, который будет создавать промежутки между токенами при разрыве строк или меток пунктуации?разрывы строк или знаки препинания в виде разрывов позиций в elasticsearch
Скажем, индекс I объект со следующей бессмысленные строки (с переводом строки) в качестве одного из полей:
The quick brown fox runs after the rabbit.
Then comes the jumpy frog.
Стандартный анализатор даст следующие лексемы с соответствующими положениями:
0 the
1 quick
2 brown
3 fox
4 runs
5 after
6 the
7 rabbit
8 then
9 comes
10 the
11 jumpy
12 frog
Это означает, что запрос match_phrase
the rabbit then comes
будет соответствовать этому документу как удару. Есть ли способ ввести промежуток между rabbit
и then
, чтобы он не совпал, если не введено slop
?
Конечно, обходным путем может быть преобразование одной строки в массив (по одной строке для каждой записи) и использование position_offset_gap
в сопоставлении полей, но я бы предпочел сохранить одну строку с символами новой строки (и конечное решение будет включать большие пробелы в позиции для строк новой строки, чем, скажем, знаки препинания).