Исключить фразу из поиска в ElasticSearch - PullRequest
1 голос
/ 22 апреля 2019

Я использую ElasticSearch (asticsearch-dsl) и ищу ключевые слова, но хотел бы игнорировать некоторые фразы из поиска.Например, ищите "best" и игнорируйте фразу "best regards": он должен найти документ "1003 * Car bla-bla-bla Best Regards" (первое совпадение правильное, второе проигнорировано), но не должно совпадать с "Bla-бла-бла С наилучшими пожеланиями ".В идеале он также должен выделять только фактическое соответствие без слов в фразе игнорирования.Я думаю о том, чтобы выполнить 2 запроса и затем удалить результаты игнорирования фразы из фактического поиска.Можно ли как-то получить список совпавших токенов с их позициями?Или есть ли лучший подход?Я не могу добавить в индекс стоп-фразы, потому что поиск динамический, и игнорируемые фразы различаются для разных пользователей.

1 Ответ

0 голосов
/ 22 апреля 2019

Я не уверен, что полностью понимаю ваш подход, однако звучит так, будто вы хотите добавить к вашему запросу запрос, который не должен сочетаться с точным соответствием фразы.это выглядело бы примерно так:

{
  "query": {
    "bool" : {
      "must" : {
        "term" : { "text_field" : "best" }
      },
      "must_not" : {
        query_string: {default_field: "text_field", query: '\"best regards\"'}
      },
   }
}

, если у вас есть несколько фраз, чтобы исключить синтаксис строки:

'\"text"\ OR \"text1"\ OR ... \"textn\"'

также мне потребовалось некоторое время, чтобы понять, насколько мощныйasticsearch пользовательские анализаторы , я не уверен, как именно выглядят ваши данные и каковы ваши потребности, но если вы этого не сделаете, вам стоит взглянуть на них, это может избавить вас от многих проблем и сделать вашзапросы более эффективны.

...