Elasticsearch весь поиск документов (Smart Search) - PullRequest
0 голосов
/ 30 апреля 2020

Я хочу написать запрос для возможности поиска по всем полям в моем индексе Elasticsearch. Я использовал массовый API для вставки данных в es и не выбирал какой-либо конкретный анализатор при индексации. По умолчанию мои поля будут проанализированы, и я не хочу менять свою индексацию.

Я хочу создать запрос, который ищет фрагмент текста во всех полях вasticsearch и возвращает все документы, содержащие этот текст как подстрока в некотором поле. Одним из способов является использование запроса MatchPhrasePrefix для каждого поля вместе с запросом OR во всех полях для поиска по всему документу. Некоторые из моих полей - это строки, а некоторые - карты строк. Запрос MatchPhrasePrefix для строки в порядке. Но для карт строк ключи не являются фиксированными, и пользователь может ввести любой ключ и любое количество ключей. Поэтому я застрял на том, как использовать запрос MatchPhrasePrefix для всех ключей такой карты, где сами ключи не являются фиксированными. Если бы ключи были исправлены, я бы перебрал записи карты и использовал бы запрос MatchPhrasePefixQuery ("mapname.key", "string") вместе с запросом OR.

Я согласен, что могу использовать QueryString и SimpleQueryString и используйте подстановочные знаки для таких ключей, как Query ("mapname. *", "string"), но это не дает правильных результатов. Поэтому я использую запрос MatchPhrasePrefix, поскольку мои поля анализируются.

Любые предложения о том, как я могу искать строку в таком поле динамической c карты. Если не это, то как мне найти строку в моем документе вasticsearch 7.4, где нет поля _all?

1 Ответ

0 голосов
/ 30 апреля 2020

Ваш вопрос трудно прочитать, и лучше, если вы разберетесь со своим вопросом и предоставите необходимую информацию для решения проблемы.

Если вы просто заботитесь о:

Любые предложения о том, как я могу искать строку в таком динамическом c поле карты. Если не это, то как я могу найти строку в моем документе вasticsearch 7.4, где нет поля _all?

Затем, это может быть легко достигнуто с помощью функции copy_to asticsearch, который доступен в вашей версииasticsearch ie 7.4. Как уже упоминалось в do c

Параметр copy_to позволяет копировать значения нескольких полей в групповое поле, которое затем может быть запрошено как одно поле. Например, поля first_name и last_name можно скопировать в поле full_name следующим образом:

Обратите внимание, что весь пример показан в ссылке ie, Определение индекса, индексирование образцов документов и поиск запрос.

Дайте мне знать, если у вас возникнут какие-либо проблемы, и с радостью поможем вам в дальнейшем.

...