Мое отображение:
"current_name" => [
"type" => "string",
"index" => "analyzed",
"analyzer" => "russian",
"fields" => [
"raw" => [
"type" => "string",
"index" => "not_analyzed"],
"raw_lowercase" => [
"type" => "string",
"analyzer" => "tolowercase"]
]
],
Мне нужно найти поле, используя следующие примеры принципов (все вместе):
Индексированная строка — «обезьяны«. Мне необходимо находить этот документ от «обезьяна».
Индексированная строка — «привет мой прекрасный мир«. Мне нужно иметь возможность находить этот документ от «привет большой мир».
В общем и целом: Индексируется — «Планета Земля самая красивая в нашей Солнечной системе». Я хочу найти этот документ «земля прекрасна».
Все эти принципы должны применяться, пока пользователь вводит в свой запрос — быстрый поиск. Язык русский.
Необязательный: 1) Индексируется — «прекрасная работа«. Я бы хотел находить документ от синоним слова «хорошо«2) проиндексировано -» прекрасный мир «найден» красавицей мира «
Как я могу реализовать описанное? Каковы ваши замечания по поводу объединения этих принципов с быстрым поиском?
Автозапчасти соображения
Стратегии для достижения того, что вы просите
1) Индексированная строка — «обезьяны». Мне нужно найти этот документ по «Обезьяна».
Это пример вытекающие или уменьшение общих склонений термина к корневой форме.
Например, сопоставление входов «подогнано», «подгонка», «подгонка», «подгонка» всех к общей форме, «подгонка».
Связывание должно происходить как для индексированных терминов, так и для условий запроса, чтобы при поиске любого из перегибов были получены результаты, содержащие любые другие перегибы.
В дистрибутив Elasticsearch включены два российских стеммера, russian
а также light_russian
, перечислены здесь (перейдите по ссылкам на описания реализации).
Любая из реализаций подсказки может быть параметризована с помощью специального анализатора. По умолчанию они используют анализатор, определенный в отображении для предлагаемого поля.
2) Индексированная строка — «Привет, мой прекрасный мир». Мне нужно иметь возможность найти этот документ «привет большой мир»
Одним из решений является просто логический поиск: hello OR my OR beautiful OR world
, Реализация Elasticsearch match
запрос по умолчанию имеет логическое значение и будет выполнять то, что вы описываете, учитывая фразу «здравствуй, мой прекрасный мир» (при условии, что «привет» и «мир» являются токенами, сгенерированными анализатором искомого поля)
Другая попытка решения будет использовать предложение фразы собрать воедино совпадающие термины в запросе. (с max_errors> = 0.5, чтобы условия my
beautiful
можно считать опечатками.)
3) Индексированная строка — «соответствующая». Мне нужно иметь возможность найти этот документ по «апроприату».
Вы описываете нечеткий поиск. Этот поиск обеспечивает 1-2 символа снисходительности в написании термина и, безусловно, поможет хроническим орфографическим ошибкам и плохим машинисткам.
Оба предложение завершения (которому нужен только префикс слова, чтобы предоставить предложения), и термин предложение (что предполагает только на основе целых вводимых терминов) имеют возможность указать расплывчатость или снисходительность в «расстоянии редактирования» между запросом и значением поля.
В целом: проиндексировано — «планета Земля самая красивая в нашем
Солнечная система «. Я хочу найти этот документ» Земля прекрасна «.Необязательно: 1) Индексируется — «отличная работа». Я хочу найти документ по
синоним слова «хорошо». 2) Индексируется — «прекрасный мир» находи «красавицей»
Worl»
(В целом) Фраза-подсказчик может быть не в состоянии предложить «планета Земля самая красивая в нашей Солнечной системе», учитывая напечатанную фразу «земля прекрасна». Это потому, что в исходном документе есть несколько не связанных между собой терминов, разделяющих «землю» и «прекрасное». Поиск фразы с помоем Если разрешить, скажем, разрыв в четыре члена (как в примере), это решение будет удовлетворено. Но вам придется выполнить (более медленный) поисковый запрос в логике завершения.
(Необязательно 1) Синонимы обсуждаются здесь, и может быть включен в ваш анализатор. Хотя я бы тщательно сплит-тестировал, так как поисковики не ожидали увидеть синонимы в своих предложениях.
(Необязательно 1) Я сомневаюсь, что в предложении о завершении будет несколько терминов, таких как «beaut worl» вам, возможно, придется использовать ребра-нграммы. Практически, однако, я сомневаюсь, что кто-нибудь когда-либо напечатает это, даже случайно.
Несколько типов подсказок могут быть запрошены в течение _suggest
вызов. Вы можете работать с комбинацией completion
а также phrase
предложения, чтобы охватить все ваши базы.
Других решений пока нет …