поиск поля вasticsearch - PullRequest
       4

поиск поля вasticsearch

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

У меня есть документ JSON, похожий на этот

{"type":"line","line_id":89522,"play_name":"Taming of the Shrew","speech_number":19,"line_number":"2.1.58","speaker":"PETRUCHIO","text_entry":"To instruct her fully in those sciences,"}
{"index":{"_index":"shakespeare","_id":89522}}
{"type":"line","line_id":89523,"play_name":"Taming of the Shrew","speech_number":19,"line_number":"2.1.59","speaker":"PETRUCHIO","text_entry":"Whereof I know she is not ignorant:"}
{"index":{"_index":"shakespeare","_id":89523}}
{"type":"line","line_id":89524,"play_name":"Taming Day","speech_number":19,"line_number":"2.1.60","speaker":"PETRUCHIO","text_entry":"Accept of him, or else you do me wrong:"}
{"index":{"_index":"shakespeare","_id":89524}}

Я пытаюсь выполнить поиск по play_name, который будет возвращен, пока play_name содержит «Taming».

Мой запрос похож на этот

GET /shakespeare/doc/_search
{
  "query":{
    "match":{"play_name":"Taming"}
  }

}

Однако, дело в том, что он не возвращает все результаты, где play_name содержит Taming.Я прочитал документы, и, похоже, это должно работать.Следовательно, кто-нибудь может сказать mw, что я делаю неправильно?

PS: это мои настройки отображения

{
  "shakespeare": {
    "mappings": {
      "doc": {
        "properties": {
          "line_id": {
            "type": "integer"
          },
          "line_number": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "play_name": {
            "type": "keyword"
          },
          "speaker": {
            "type": "keyword"
          },
          "speech_number": {
            "type": "integer"
          },
          "text_entry": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "type": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          }
        }
      }
    }
  }
}

Ответы [ 2 ]

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

Вы должны изменить отображение для поля play_name на "type": "text".Вы все еще можете включить сопоставление ключевых слов, если планируете искать точные совпадения.

Окончательное сопоставление для play_name должно выглядеть примерно так:

      "play_name": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 256
          }
        }
0 голосов
/ 10 июня 2018

РЕДАКТИРОВАТЬ

Попробуйте как это:

"query": {
        "wildcard" : {
             "play_name":"*Taming*" 
           }
 }    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...