Эластичный поисковый запрос match_pharse не работает должным образом - PullRequest
0 голосов
/ 11 июня 2018

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

Ниже приведен документ, который доступен для эластичного поиска

    {  
       "took":7,
       "timed_out":false,
       "_shards":{  
          "total":5,
          "successful":5,
          "skipped":0,
          "failed":0
       },
       "hits":{  
          "total":2910,
          "max_score":1.0,
          "hits":[  
             {  
                "_index":"documents",
                "_type":"doc",
                "_id":"DmLD22MBFTg0XFZppYt8",
                "_score":1.0,
                "_source":{  
                   "doct_country":"DE",
                   "filename":"series_Accessories_v1_de-DE.pdf",


             }

          ]
       }
    }

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

GET documents/_search
{
    "query": {
        "match_phrase" : {
            "message" : "Accessories_v1_de-DE.pdf"
        }
    }
}

Для запроса выше я получаю этот ответ:

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

1 Ответ

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

Есть две проблемы.Предположительно в вашем запросе вы хотите использовать поле filename вместо message, которого нет в вашем примере документа:

GET documents/_search
{
    "query": {
        "match_phrase" : {
            "filename" : "Accessories_v1_de-DE.pdf"
        }
    }
}

Во-вторых, вам нужно Elasticsearch, чтобы знать, что поле filename должноиндексироваться с _, считающимся разделением.Это не происходит по умолчанию.Один из способов сделать это состоит в том, чтобы определить ваше отображение следующим образом:

PUT /documents
{
    "mappings" : {
        "document" : {
            "properties" : {
                "filename" : { "type" : "text", "analyzer": "simple" }
            }
        }
    }
}

Простой анализатор будет разбивать на любые не-буквы, поэтому _ и числа будут рассматриваться как расщепления.В зависимости от вашего приложения вам может потребоваться более точный контроль над токенизацией.См. документацию .

...