ElasticSearch не фильтруется - PullRequest
2 голосов
/ 04 марта 2020

Я пытаюсь отфильтровать на основе categoryCode и не получаю никакого результата назад,

Я пытался использовать поле, которое не анализировалось, и оно сработало, как я могу заставить его работать для этого? поле Speci c?

  "categoryCode": {
  "type": "text",
  "analyzer": "autocomplete",
  "search_analyzer": "standard",
  "norms": false,
  "copy_to": "all_fields",
  "doc_values": false,
  "fields": {
    "raw": {
      "type": "keyword",
      "index": false,
      "normalizer": "lowercase_normalizer",
      "norms": false
    },
    "fulltext": {
      "type": "text",
      "analyzer": "standard",
      "doc_values": false
    }
  }
}

запрос на фильтрацию:

   "bool":{
      "filter":[
         {
            "bool":{
               "must":[
                  {
                     "term":{
                        "categoryCode":{
                           "value":"PAYROLL"
                        }
                     }
                  }
               ]
            }
         }
      ]
   }
}

1 Ответ

1 голос
/ 05 марта 2020

Вы ищете на categoryCode, который анализируется, следовательно, проходит фазу анализа и создает токены в соответствии с вашим standard анализатором (поисковым анализатором), который также понижает токены.

Вместо categoryCode вам нужно выполнить поиск по categoryCode.raw, который содержит форму ключевого слова вашего документа. Также вам может потребоваться удалить lowercase_normalizer, как в вашем запросе, вы используете запрос term, который бы не t go через ваше lowercase normalizer на необработанном поле и может привести к тому, что PAYROLL не совпадет с payroll.

Я создал образец определения индекса, проиндексировал документ и изменил ваш поисковый запрос, чтобы получить ожидаемые результаты (все ваше сопоставление было недоступно, поэтому создан минимальный пример объяснения)

Индекс по умолчанию (минимум)

{
    "mappings": {
        "properties": {
            "categoryCode": {
                "type": "text",
                "fields": {
                    "raw": {
                        "type": "keyword",
                        "norms": false
                    },
                    "fulltext": {
                        "type": "text",
                        "analyzer": "standard",
                        "doc_values": false
                    }
                }
            }
        }
    }
}

Индекс до c

{
   "categoryCode" : "PAYROLL"
}

Запрос поиска

{
    "query": {
        "bool": {
            "filter": [
                {
                    "bool": {
                        "must": [
                            {
                                "term": {
                                    "categoryCode.raw": { -->notice `.raw`
                                        "value": "PAYROLL"
                                    }
                                }
                            }
                        ]
                    }
                }
            ]
        }
    }
}

Результат поиска

 "hits": [
         {
            "_index": "so-60531341",
            "_type": "_doc",
            "_id": "1",
            "_score": 0.0,
            "_source": {
               "categoryCode": "PAYROLL"
            }
         }
      ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...