ElasticSearch Match Query fuzzines по номерам - PullRequest
1 голос
/ 21 марта 2019

Если я ищу токены с номерами, fuzzines не работает правильно.

Dokument:
"Nice Photo S61"

Дает мне результат по запросу

"Nices"

Но не так скоро я бы использовал

"S6"

У меня нет результата

Вот мой запрос

GET /index1/_search
{
    "query": {
        "match" : {
         "url1" : {
             "query" : "s6",
             "fuzziness": "auto",
             "prefix_length": "3",
              "max_expansions": 6,
              "operator":  "and"
        }
    }
  }
}

Вот мои настройки индекса:

  PUT /index1/_settings
{
  "settings": {
    "analysis": {
      "analyzer": {
        "product_analyzer": {
          "type": "custom",

          "tokenizer": "punctuation", 
          "filter": [
            "lowercase" 
          ]
        }
      },
      "tokenizer": {
        "punctuation": { 
          "type": "pattern",
          "pattern": "[-_.:~ ]"
        }
      }
      }
  },
  "mappings" : {
    "index1" : {
      "properties" : {
        "url":{
        "type" :"text",
        "analyzer" : "product_analyzer"
        }
        }
      }
    }
  }

Ответы [ 2 ]

1 голос
/ 21 марта 2019

Дело не в цифрах. При установке fuzziness на auto означает автоматическое создание базы для редактирования расстояния для вашего термина.

AUTO

Генерирует расстояние редактирования на основе длины термина. Низкий и аргументы большого расстояния могут быть опционально предоставлены. Если не указано, значения по умолчанию 3 и 6, что эквивалентно АВТО: 3,6 для длины:

0..2 Должно совпадать

3..5 Допускается одно редактирование

> 5 Допустимые два редактирования. Обычно значение AUTO должно быть предпочтительным для нечеткости.

И

prefix_length

Количество начальных символов, которые не будут «размыты». Это помогает сократить количество терминов, которые необходимо изучить. По умолчанию 0.

Таким образом, вы можете изменить свой запрос следующим образом:

{
    "query": {
        "match" : {
         "url1" : {
             "query" : "S6",
             "fuzziness": "1",
             "prefix_length": "0",
              "max_expansions": 6,
              "operator":  "and"
        }
    }
  }
}

рефов: https://www.elastic.co/guide/en/elasticsearch/reference/current/common-options.html#fuzziness https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-fuzzy-query.html

0 голосов
/ 21 марта 2019

Вот несколько соображений.

  • В опубликованных вами примерах ваш запрос пытается соответствовать полю url1, но в вашем отображении вы определили поле url. Я предполагаю, что это была просто опечатка в ваших примерах.
  • В вашем запросе вы устанавливаете длину префикса в 3 символа, но затем вы ищете s6, что явно не соответствует условию длины.
  • В вашем запросе вы устанавливаете значение fuzziness равным AUTO, что для строк <= 2 символа означает, что ваш термин должен точно соответствовать (см. <a href="https://www.elastic.co/guide/en/elasticsearch/reference/7.x/common-options.html#fuzziness" rel="nofollow noreferrer"> документация )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...