при поиске уникального идентификатора он дает многократный счет - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть 5 миллионов документов, которые имеют уникальный идентификатор для каждого документа. При поиске уникального клиента он возвращает документы 1992 года. И это происходит для каждого уникального идентификатора, давая счетчик различий, так как он должен давать только один документ.

Я выполнил запрос в кибане ниже:

GET /my_index/_search
{ 
  "query": {
     "match": {
      "customerid": "e32e6b34-5e3f-4bb9-a3af-e89714b418ca"
      }
  }
}

Это дает мне нижерезультат для уникального идентификатора клиента:

{
 "took" : 20,
 "timed_out" : false,
 "_shards" : {
 "total" : 1,
 "successful" : 1,
 "skipped" : 0,
 "failed" : 0
            },
 "hits" : {
 "total" : {
 "value" : 1992,
 "relation" : "eq"
    },
 "max_score" : 59.505646,
 "hits" : [
 ....
 ....
 ....

Ниже приведено сопоставление моего индекса:

{
 "pb_2409" : {
 "mappings" : {
  "dynamic_date_formats" : [
    "yyyy-MM-dd||yyyy-MM-dd HH:mm:ss.S||yyyy-MM-dd HH:mm:ss"
  ],
  "dynamic_templates" : [
    {
      "objects" : {
        "match_mapping_type" : "object",
        "mapping" : {
          "type" : "nested"
        }
      }
    }
  ],
  "properties" : {
    "customerid" : {
      "type" : "text",
      "fields" : {
        "keyword" : {
          "type" : "keyword",
          "ignore_above" : 256
        }
      }

Я что-то упустил?

1 Ответ

1 голос
/ 06 ноября 2019

Измените customerid введите на ключевое слово и добавьте нормализатор в настройки индекса.

 "settings": {
    "analysis": {
      "normalizer": {
        "my_custom_normalizer": {
          "type": "custom",
          "filter": [
            "lowercase"
          ]
        }
      }
    }
  }

Чем добавьте "normalizer": "my_custom_normalizer"в поле customerid (если вы хотите выполнить поиск по своему идентификатору без учета регистра)

"properties" : {
    "customerid" : {
      "type" : "text",
      "fields" : {
        "keyword" : {
          "type" : "keyword",
          "ignore_above" : 256,
          "normalizer": "my_custom_normalizer"
        }
      }
}

Ваш поисковый запрос будет выглядеть как

    GET /my_index/_search
    { 
      "query": {
         "term": {
          "customerid.keyword": {
             "value":"e32e6b34-5e3f-4bb9-a3af-e89714b418ca"
          }
         }
      }
    }

Ваши новые сопоставления:

PUT /index
{
  "pb_2409": {
    "mappings": {
      "dynamic_date_formats": [
        "yyyy-MM-dd||yyyy-MM-dd HH:mm:ss.S||yyyy-MM-dd HH:mm:ss"
      ],
      "dynamic_templates": [
        {
          "objects": {
            "match_mapping_type": "object",
            "mapping": {
              "type": "nested"
            }
          }
        }
      ],
      "properties": {
        "customerid": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256,
              "normalizer": "my_custom_normalizer"
            }
          }
        }
      }
    },
    "settings": {
      "analysis": {
        "normalizer": {
          "my_custom_normalizer": {
            "type": "custom",
            "filter": [
              "lowercase"
            ]
          }
        }
      }
    }
  }
}

https://www.elastic.co/blog/strings-are-dead-long-live-strings Надеюсь, что поможет

...