ElasticSearch не может вернуть результат в поле ключевого слова, где значение содержит апостроф - PullRequest
0 голосов
/ 19 декабря 2018

Приложение, над которым я работаю, позволяет использовать любой символ в теге.Теги хранятся в документе в виде массива.Другие персонажи работают нормально, но апостроф - нет.В предыдущей версии ES это поле отображалось как анализируемая строка, но текущая версия не позволяет нам использовать некоторые агрегации, которые мы использовали, поэтому я изменил его на ключевое слово, и эта проблема появилась.Когда я запрашиваю документы с указанным тегом, я не получаю результатов, хотя знаю, что мой запрос верен для поля (этот же запрос возвращает результаты для всех других тегов, кроме тегов, содержащих апостроф).Установка выглядит следующим образом:

Отображение поля:

{ 
    "tags" : {
       "type" : "keyword",
       "store" : true
    }
}

Данные поля:

"tags" : [
    "Mike's Tag"
  ]

Запрос

{
  "query": {
    "bool": {
      "should": [
        {
          "query_string": {
            "query": "tags:\"Mike's Test\"",
            "default_operator": "AND"
          }
        }
      ]
    }
  }
}

1 Ответ

0 голосов
/ 19 декабря 2018

Если вы не хотите оценивать теги, вы можете использовать запрос term для получения желаемого результата.

Используйте запрос ниже:

{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "tags": "Mike's Tag"
          }
        }
      ]
    }
  }
}

Обновление послекомментарии :

В случае, если вы хотите сделать это через query_string, вот запрос:

{
  "query": {
    "query_string": {
      "query": "Mike's Tag",
      "fields": [
        "tags"
      ]
    }
  }
}

ПРИМЕЧАНИЕ : я бы все же предложил вамиспользуйте запрос term или terms в контексте фильтра, если вы не хотите оценивать.

Вывод вышеуказанного запроса (с использованием запроса term):

{
  "took": 3,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 2,
    "max_score": 0,
    "hits": [
      {
        "_index": "test",
        "_type": "_doc",
        "_id": "1",
        "_score": 0,
        "_source": {
          "tags": [
            "Mike's Tag",
            "Another Tag"
          ]
        }
      },
      {
        "_index": "test",
        "_type": "_doc",
        "_id": "2",
        "_score": 0,
        "_source": {
          "tags": [
            "Mike's Tag",
            "Another one Tag"
          ]
        }
      }
    ]
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...