Elasticsearch. Как реализовать следующие принципы, сочетая это с быстрым поиском?

Мое отображение:

"current_name" => [
"type"     => "string",
"index"    => "analyzed",
"analyzer" => "russian",
"fields"   => [
"raw"           => [
"type"  => "string",
"index" => "not_analyzed"],
"raw_lowercase" => [
"type"     => "string",
"analyzer" => "tolowercase"]
]
],

Мне нужно найти поле, используя следующие примеры принципов (все вместе):

  1. Индексированная строка — «обезьяны«. Мне необходимо находить этот документ от «обезьяна».

  2. Индексированная строка — «привет мой прекрасный мир«. Мне нужно иметь возможность находить этот документ от «привет большой мир».

  3. Индексированная строка — «подходящее«. Мне нужно иметь возможность находить этот документ от «apropriat».

В общем и целом: Индексируется — «Планета Земля самая красивая в нашей Солнечной системе». Я хочу найти этот документ «земля прекрасна».

Все эти принципы должны применяться, пока пользователь вводит в свой запрос — быстрый поиск. Язык русский.

Необязательный: 1) Индексируется — «прекрасная работа«. Я бы хотел находить документ от синоним слова «хорошо«2) проиндексировано -» прекрасный мир «найден» красавицей мира «

Как я могу реализовать описанное? Каковы ваши замечания по поводу объединения этих принципов с быстрым поиском?

0

Решение

Автозапчасти соображения

  • Поисковики ожидают, что автозаполнение будет очень отзывчивым. Если какой-либо из ваших мягких предложений стоит
    >100 мс, рассмотрите возможность перемещения из автоматического предложения и поиска
    Результаты.
  • Autosuggest помогает подтвердить, что поисковик движется в правильном направлении. Для каждой новой функции мягкого предложения, которую вы описываете и реализуете, учитывайте соотношение плохие предложения представил вместе с хорошими. С ограниченным пространством экрана, доступным для автоматического предложения, часто лучше быть точным, а не всесторонним.

Стратегии для достижения того, что вы просите

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 предложения, чтобы охватить все ваши базы.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]