Elasticsearch находит только числовые значения - PullRequest
0 голосов
/ 05 октября 2018

Доброе утро всем!

С упругим поиском я могу выполнить этот запрос, который позволяет мне иметь все профили для определенного phone_user, он работает:

curl -H 'Content-Type: application/json' -XPOST 'localhost:9200/companyname/projectname/_search?pretty' -d '
{"query":{"bool":{"filter":{"terms":{"phone_user":["33612345678"]}}}}}'

{
  "took" : 4,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 2,
    "max_score" : null,
    "hits" : [
      {
        "_index" : "companyname",
        "_type" : "projectname",
        "_id" : "113",
        "_score" : null,
        "_source" : {
          "phone_user" : "33612345678",
          "status_user" : "READY",

          ……

        }
      }
    ]
  }
}

ОднакоЕсли значение больше не число, а текст, у меня больше нет результатов:

curl -H 'Content-Type: application/json' -XPOST 'localhost:9200/companyname/projectname/_search?pretty' -d '
{"query":{"bool":{"filter":{"terms":{"status_user":["READY"]}}}}}'

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

Мое сопоставление:

{
  "conpanyname" : {
    "mappings" : {
      "projectname" : {
        "properties" : {
          "phone_user" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          },
          "status_user" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          }
        }
      }
    }
  }
}

Сталкивались ли вы когда-либо с такой проблемой раньше?

Большое спасибо!

1 Ответ

0 голосов
/ 05 октября 2018

Поскольку status_user является текстовым полем analyzed, вы можете либо:

Сделать точный запрос с помощью условия запроса в подполе ключевого слова, либо сделать запрос соответствия (с возможным анализом текста) в текстовом поле.Но вы должны выбрать: D

, поэтому для точного соответствия

{
  "query": {
    "bool": {
      "filter": {
        "terms": {
          "status_user.keyword": [
            "READY"
          ]
        }
      }
    }
  }
}

или

{
  "query": {
    "bool": {
      "filter": {
        "match": {
          "status_user": "READY"
        }
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...