Неправильные результаты, появляющиеся в эластичном поиске, должны соответствовать запросу

У меня есть следующий анализатор в поле поиска:

GET _analyze
{
  "tokenizer": "standard",
  "filter":  [ "word_delimiter","lowercase", {"type" : "shingle",
                            "min_shingle_size" : 2,
                            "max_shingle_size" : 4,
                            "output_unigrams" : true}, {"type" : "pattern_replace",
                            "pattern" : " ",
                            "replacement" : ""} ],
  "text":      "One marium malik 270"
}

Эластичный поисковый запрос:

{
  ["index"]=>
  string(19) "_dev"
  ["from"]=>
  int(0)
  ["size"]=>
  int(60)
  ["body"]=>
  array(3) {
    ["query"]=>
    array(1) {
      ["bool"]=>
      array(3) {
        ["should"]=>
        array(2) {
          [0]=>
          array(1) {
            ["bool"]=>
            array(1) {
              ["must"]=>
              array(3) {
                [0]=>
                array(1) {
                  ["match"]=>
                  array(1) {
                    ["searched_text"]=>
                    array(2) {
                      ["query"]=>
                      string(4) "marium"
                      ["fuzziness"]=>
                      string(4) "AUTO"
                    }
                  }
                }
                [1]=>
                array(1) {
                  ["match"]=>
                  array(1) {
                    ["searched_text"]=>
                    array(1) {
                      ["query"]=>
                      string(3) "malik270"
                    }
                  }
                }

              }
            }
          }
          [1]=>
          array(1) {
            ["bool"]=>
            array(1) {
              ["should"]=>
              array(1) {
                [0]=>
                array(1) {
                  ["match"]=>
                  array(1) {
                    ["manu_no"]=>
                    array(2) {
                      ["query"]=>
                      string(14) "marium malik270"
                      ["boost"]=>
                      int(10)
                    }
                  }
                }
              }
            }
          }
        }
        ["minimum_should_match"]=>
        int(1)
      }
    }    
    ["sort"]=>
    array(1) {
      ["sp"]=>
      array(2) {
        ["mode"]=>
        string(3) "min"
        ["order"]=>
        string(4) "desc"
      }
    }
  }
}

Когда я ищу вышеупомянутые ключевые слова, я получаю несколько не относящихся к делу результатов.

Не относящиеся к делу результаты включают в себя:

marium malik 97
marium malik Plus TN
marium malik PLUS OG

и т.п.

Но, если я удаляю 'malik', отделяю его в другом запросе:

must: match searched_keyword: 'malik'
must: match searched_keyword: '270'

и оставьте число в этом запросе в одиночку, тогда он отлично работает.

В чем может быть проблема?

0 ответов

Другие вопросы по тегам