match_phrase не работает с анализируемым индексом

Я прочитал это сообщение, но не совсем понял, как его применять.

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

es.indices.create(index='bhar',body = {
 "settings":{
  "analysis":{
   "analyzer":{
    "my_stop_analyzer":{
     "type":"custom",
     "tokenizer":"standard",
     "filter":        ["english_possessive_stemmer","lowercase","english_stop","english_stemmer"]
              }
             },"filter":{
               "english_stop":{
                    "type":"stop",
                    "stopwords":"_english_"
                               },
                                 "english_stemmer":{
                                   "type":"stemmer",
                                   "name":"english"
                                    },
                                 "english_possessive_stemmer": {
                                   "type": "stemmer",
                                   "language": "possessive_english"
                                    }}}},
                          "mappings":{
                            "my_type":{
                               "properties":{
                                  "test": {
                                    "type":"text",
                                    "analyzer" : "my_stop_analyzer"
                                     }
                                     }
                                     }
                                     }
                                     })

`

И одна запись содержит данные, которые являются «высотой пикировки». Когда я ищу "башню выбора", он все равно дает мне результат с match_phrase, который я написал следующим образом:

scroll = elasticsearch.helpers.scan(es, query={
    "query":{
    "match_phrase":{ 
    "test":{
    "query":"pick rule"
          }
                 }
          }
 },index='bhar', scroll='100s')`

Есть ли способ получить только точное совпадение фразы? Спасибо


person sleepophile    schedule 10.05.2017    source источник


Ответы (1)


Ваш анализатор изменяет проиндексированные термины, и у него нет возможности сохранить исходный текст. Я предлагаю немного изменить ваше отображение:

    "test": {
      "type": "text",
      "analyzer": "my_stop_analyzer",
      "fields": {
        "keyword": {
          "type": "keyword"
        }
      }
    }

И добавьте в свои запросы также опцию "точное соответствие":

"match_phrase": {
  "test.keyword": "picks towering"
}

or

  "query": {
    "bool": {
      "should": [
        {
          "match_phrase": {
            "test.keyword": "picks towering"
          }
        },
        {
          "match_phrase": {
            "test": "picks towering"
          }
        }
      ]
    }
  }

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

person Andrei Stefan    schedule 10.05.2017
comment
Мне также нужно запросить то же поле с флективными формами в другом скрипте. Если я изменю свое отображение, это сработает? - person sleepophile; 10.05.2017
comment
Предоставленное мною сопоставление просто добавляет что-то к этому полю: подполе и запрос, который я добавил к начальному запросу, использует подполе. Ваши флективные формы в другом запросе сценария могут быть добавлены к моему предложенному bool запросу в качестве другого оператора. - person Andrei Stefan; 10.05.2017
comment
Могу ли я дважды проиндексировать поле? Один раз со специализированным анализатором и снова со стандартным анализатором? - person sleepophile; 10.05.2017
comment
"match_phrase": { "test.keyword": "Picks Tower"} Это не дало мне результата - person sleepophile; 10.05.2017
comment
Для какого значения в документе этот запрос не соответствует? - person Andrei Stefan; 10.05.2017
comment
test.keyword должен помочь мне добиться точного соответствия текста, верно? Несмотря на то, что в документе есть «Башня кирки», я не получил результата. - person sleepophile; 10.05.2017
comment
Если вы используете "term": { "test.keyword": "Picks Tower"}, совпадает ли он? - person Andrei Stefan; 10.05.2017
comment
Нет, это все еще не совпадает - person sleepophile; 10.05.2017
comment
Какое точное значение вы указали в поле test? - person Andrei Stefan; 10.05.2017
comment
'Picks Tower the extension' Просто случайное значение - person sleepophile; 10.05.2017
comment
Когда вы индексируете поле с помощью анализатора keyword, значения поля не токенизируются. Таким образом, документу будет соответствовать только «Picks Tower the extension». @bhargavi - person Archit Saxena; 11.05.2017