AWS Elasti c search: Поиск должен быть выполнен по всей комбинации с данным запросом - PullRequest
0 голосов
/ 10 апреля 2020

Я работаю над AWS Elasti c Поиск. Я столкнулся с одной ситуацией в моем проекте, где в моих отчетах мне приходится искать ключевые слова, такие как «вирус короны».

Но результат должен содержать ключевые слова, такие как «вирус короны», «корона» и «вирус». "и" коронавирус ".

Пожалуйста, сообщите мне, как мне составить свой запрос DSL.

Примечание: Работа на языке PHP.

Благодарим Вас за помощь.

// Amit

1 Ответ

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

Вам необходимо использовать фильтр токенов шингла

Фильтр токенов типа шингл, который создает дранку (n-грамм токена) из потока токенов. Другими словами, он создает комбинации токенов как один токен. Например, предложение «пожалуйста, разделите это предложение на черепицу» может быть разбито на черепицы «пожалуйста, разделите», «разделите это», «это предложение», «предложение на» и «на черепицу».

Отображение

PUT index91
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "shingle_filter"
          ]
        }
      },
      "filter": {
        "shingle_filter": {
          "type": "shingle",
          "min_shingle_size": 2,
          "max_shingle_size": 3,
          "output_unigrams": true,
           "token_separator": ""
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "analyzer": "my_analyzer"
      }
    }
  }
}

Данные:

POST index91/_doc
{
  "title":"corona virus"
}

Запрос:

GET index91/_search
{
  "query": {
    "match": {
      "title": "coronavirus"
    }
  }
}

Результат:

"hits" : [
      {
        "_index" : "index91",
        "_type" : "_doc",
        "_id" : "gNmUZHEBrJsHVOidaoU_",
        "_score" : 0.9438393,
        "_source" : {
          "title" : "corona virus"
        }
      }

Это также будет работать для "корона", "вирус короны", "вирус"

...