почему Elasticsearch не возвращает правильные результаты? - PullRequest
0 голосов
/ 12 июня 2018

Я использую Elasticsearch 6.2 , настроенный с одним кластером из 2 узлов .

GET _cluster/health:

 {
    "cluster_name": "cluster_name",
    "status": "green",
    "timed_out": false,
    "number_of_nodes": 2,
    "number_of_data_nodes": 2,
    "active_primary_shards": 47,
    "active_shards": 94,
    "relocating_shards": 0,
    "initializing_shards": 0,
    "unassigned_shards": 0,
    "delayed_unassigned_shards": 0,
    "number_of_pending_tasks": 0,
    "number_of_in_flight_fetch": 0,
    "task_max_waiting_in_queue_millis": 0,
    "active_shards_percent_as_number": 100
    }

GET myindex/_settings:

{
  "myindex": {
    "settings": {
      "index": {
        "number_of_shards": "3",
        "analysis": {
          "analyzer": {
            "url_split_analyzer": {
              "filter": "lowercase",
              "tokenizer": "url_split"
            }
          },
          "tokenizer": {
            "url_split": {
              "pattern": "[^a-zA-Z0-9]",
              "type": "pattern"
            }
          }
        },
        "number_of_replicas": "1",
        "version": {
          "created": "6020499"
        }
      }
    }
  }
}

вот снимок структуры _mappings:

    "myindex": {
        "mappings": {
          "mytype": {
            "properties": {
              "@timestamp": {
                "type": "date"
              },
              ............
              "active": {
                 "type": "short"
               },
             "id_domain": {
                "type": "short",
                "ignore_malformed": true
              },
            "url": {
                 "type": "text",
                 "similarity": "boolean",
                  "analyzer": "url_split_analyzer"
            }
           }
          .......

Я случайно нашел документы в своем индексе, которые не могу найти, если я запрашиваю индекс, используясвойство id_domain.

Например:

GET /myindex/mytype/_search
{ 
    "query": {
      "bool": {
        "must": [
          {
            "match": { "active": 1 }
          }
        ]
      }
    }
}

пример вывода:

{
    "_index": "myindex",
    "_type": "mytype",
    "_id": "myurl",
    "_score": 1,
    "_source": {
        "id_domain": "73993",
        "active": 1,
        "url": "myurl",
        "@timestamp": "2018-05-21T10:55:16.247Z"
    }
}
....

возвращает список документов, в которых я нашел id_domain, которые я не могунайти запросы к этому домену идентификаторов, например:

GET /myindex/mytype/_search
{
  "query": {
      "match": {
        "id_domain": 73993 // with or without " got the same result
      }
  }
}

output

{
  "took": 5,
  "timed_out": false,
  "_shards": {
    "total": 3,
    "successful": 3,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 0,
    "max_score": null,
    "hits": []
  }
}

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

Я убежден, что что-то упустил.Есть ли какая-то причина в этом поведении?

Спасибо

1 Ответ

0 голосов
/ 12 июня 2018

В вашем отображении id_domain имеет тип short, но в вашем документе у вас есть значение, которое выходит за пределы для коротких значений ([от -32 768 до 32 767]), то есть 73993.

Вам нужно изменить тип на integer и все будет хорошо

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