Почему этот запросasticsearch ничего не возвращает - PullRequest
0 голосов
/ 17 апреля 2020

Я выполнил ниже elasticsearch запрос.

GET amasyn/_search
{
    "query": {
        "bool" : {
            "filter" : {
                "term": {"ordernumber": "112-9550919-9141020"}
            }
        }
    }
}

Но он не получает хитов

{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 0,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  }
}

Но у меня есть документ с этим ordernumber в индексе. ordernumber является текстовым полем.

Когда я изменяю вышеупомянутый запрос, заменяя term на match, я получаю общее количество совпадений как число совпадений для данного запроса. Пожалуйста, объясните, что здесь происходит и как это решить.

1 Ответ

2 голосов
/ 17 апреля 2020

Это потому, что вы использовали ordernumber поле с типом в качестве текста, поэтому оно анализируется. Пожалуйста, укажите разницу между текстом и ключевым словом в этом ответе Разница между ключевым словом и текстом в ElasticSearch .

Таким образом, вы можете определить как текст, так и ключевое слово для своего поля ordernumber.

Отображение

{
    "mappings": {
        "properties": {
            "ordernumber": {
                "type": "text",
                "fields": {
                    "keyword": {
                        "type": "keyword",
                        "ignore_above": 256
                    }
                }
            }
        }
    }
}

, а затем вы можете использовать термин запрос, как показано ниже:

{
    "query": {
        "bool" : {
            "filter" : {
                "term": {"ordernumber.keyword": "112-9550919-9141020"}
            }
        }
    }
}

Пожалуйста, посмотрите, как поля text и keyword маркируются для вашего текста.

Стандартный анализатор

Этот анализатор используется, когда вы определяете свое поле как text.

{
    "analyzer": "standard",
    "text" : "112-9550919-9141020"
}

Результат:

 {
        "tokens": [
            {
                "token": "112",
                "start_offset": 0,
                "end_offset": 3,
                "type": "<NUM>",
                "position": 0
            },
            {
                "token": "9550919",
                "start_offset": 4,
                "end_offset": 11,
                "type": "<NUM>",
                "position": 1
            },
            {
                "token": "9141020",
                "start_offset": 12,
                "end_offset": 19,
                "type": "<NUM>",
                "position": 2
            }
        ]
    }

Ключевое слово Анализатор

Этот анализатор используется, когда вы определяете свое поле как keyword.

{
    "analyzer": "keyword",
    "text" : "112-9550919-9141020"
}

Результат

 {
        "tokens": [
            {
                "token": "112-9550919-9141020",
                "start_offset": 0,
                "end_offset": 19,
                "type": "word",
                "position": 0
            }
        ]
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...