Elasti c поиск Совпадение запроса с запятой не работает - PullRequest
0 голосов
/ 03 марта 2020

Привет. Мы хотели поддерживать как частичный поиск, так и точное совпадение для одной поданной категории.

Вот отображение категории, мы достигли этого с помощью fields.raw

"category": {
                    "properties": {
                        "name": {
                            "type": "string",
                            "analyzer": "autocomplete",
                            "search_analyzer": "standard",
                            "fields": {
                                "raw": {
                                   "type": "string",
                                   "index": "not_analyzed"
                                }
                             }
                        }
                    }
                }

Все работает как положено, я могу выполнять как точный, так и частичный поиск. Но когда у меня запятая "" "в данных, точное совпадение не работает. Я ищу с именем category.name.raw, которое не_анализовано

 { "query": {
"filtered": {
  "query": {
    "bool": {
      "must": [
        {
          "multi_match": {
            "query": "",
            "type": "cross_fields",
            "fields": [
              "filed1",
              "field2^12"
            ]
          }
        },
        {
          "match": {
            "category.name.raw": " Poverty, Poor and Hunger"
          }
        }
      ]
    }
  }
}}}

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

Ответы [ 2 ]

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

Проблема в

    {
      "match": {
        "category.name.raw": " Poverty, Poor and Hunger"
      }
    }

Хотя целевое поле отображается как not_analyzed (иначе keyword в более новых версиях Elasticsearch), входные данные запроса будут проанализированы. Я думаю он унаследует standard анализатор, определенный для search_analyzer на category.name.

Если вам нужно точное совпадение , используйте term запрос вместо match запроса.

0 голосов
/ 03 марта 2020

Попробуйте использовать приведенный ниже анализатор:

        "lower_whitespace" : {
          "filter" : [
            "lowercase"
          ],
          "type" : "custom",
          "tokenizer" : "whitespace"
        }

, чтобы узнать подробности, проверьте токенизаторы ниже: https://www.elastic.co/guide/en/elasticsearch/reference/5.1/analysis-whitespace-analyzer.html

И, похоже, вы используете старую версию из Elasti c поиск и модернизация будут отличной идеей

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...