Процент нечеткого соответствия - PullRequest
0 голосов
/ 13 октября 2019

Когда я запрашиваю нечеткое совпадение следующим образом ,asticsearch по-прежнему возвращает только _scoreНо я ожидаю, что процент совпадения основан на нечетком алгоритме. Я думал, что это простая конфигурируемая вещь, но я не могу найти ничего из этого, так как обычно показывают процент совпадения для результата нечеткого совпадения.

Как это можно сделать? Или это не обычная «практика» вasticsearch? Но то, что я нашел в большинстве пользовательских интерфейсов, показывает процент совпадений для нечеткого совпадения.

 "query": { 
        "fuzzy": {
                "name": {
                    "value": "Shahid"
                }
            }
      }

Ответ:

"hits" : [{
    "_index" : "users",
    "_type" : "user",
    "_id" : "5sadsadsaddas",
    "_score" : 0.11127616,
    "fuzzyMatchPercentage": 100% // I expect something like this here
    "_source" : {
      "name" : "Shahid",
      "email" : "shahid@codeforgeek.com",
      "city" : "mumbai"
    }
  },

1 Ответ

0 голосов
/ 13 октября 2019

Как уже упоминалось в комментарии, это не то, как fuzzy -запрос работает в Elasticsearch. По умолчанию результаты поиска сортируются по убыванию оценки, где оценка показывает, насколько хорошо документ соответствует определенному запросу. Аспект нечеткости учитывается при расчете этой оценки: чем точнее / менее нечетко соответствует запрос, тем выше оценка. В этом можно убедиться, запросив подробное объяснение оценки (в Elasticsearch v7.x аспект нечеткости включен в расчет коэффициента усиления). Посмотрите на следующий пример:

1. Индексирование двух образцов документов (один с собственным именем, другой с ошибочным именем)

POST fuzzy/_bulk
{"index":{"_id":1}}
{"name": "Shahid"}
{"index":{"_id":2}}
{"name": "Shahib"}

2. Поиск с помощью fuzzy -запроса имени "Шахид"

GET fuzzy/_search
{
  "explain": true, 
  "query": {
    "fuzzy": {
      "name": {
        "value": "Shahid"
      }
    }
  }
}

3. Пункт оценки и объяснения для обоих соответствующих документов

Для правильно написанного документа («Шахид»):

    "_explanation" : {
      "value" : 0.57762265,
      "description" : "sum of:",
      "details" : [
        {
          "value" : 0.57762265,
          "description" : "weight(name:shahid in 0) [PerFieldSimilarity], result of:",
          "details" : [
            {
              "value" : 0.57762265,
              "description" : "score(freq=1.0), product of:",
              "details" : [
                {
                  "value" : 1.8333334,
                  "description" : "boost",
                  "details" : [ ]
                },
                {
                  "value" : 0.6931472,
                  "description" : "idf, computed as log(1 + (N - n + 0.5) / (n + 0.5)) from:",
                  "details" : [
                    {
                      "value" : 1,
                      "description" : "n, number of documents containing term",
                      "details" : [ ]
                    },
                    {
                      "value" : 2,
                      "description" : "N, total number of documents with field",
                      "details" : [ ]
                    }
                  ]
                },
                {
                  "value" : 0.45454544,
                  "description" : "tf, computed as freq / (freq + k1 * (1 - b + b * dl / avgdl)) from:",
                  "details" : [
                    {
                      "value" : 1.0,
                      "description" : "freq, occurrences of term within document",
                      "details" : [ ]
                    },
                    {
                      "value" : 1.2,
                      "description" : "k1, term saturation parameter",
                      "details" : [ ]
                    },
                    {
                      "value" : 0.75,
                      "description" : "b, length normalization parameter",
                      "details" : [ ]
                    },
                    {
                      "value" : 1.0,
                      "description" : "dl, length of field",
                      "details" : [ ]
                    },
                    {
                      "value" : 1.0,
                      "description" : "avgdl, average length of field",
                      "details" : [ ]
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    }

Для неправильно написанного документа («Шахиб»):

    "_explanation" : {
      "value" : 0.46209806,
      "description" : "sum of:",
      "details" : [
        {
          "value" : 0.46209806,
          "description" : "weight(name:shahib in 1) [PerFieldSimilarity], result of:",
          "details" : [
            {
              "value" : 0.46209806,
              "description" : "score(freq=1.0), product of:",
              "details" : [
                {
                  "value" : 1.4666666,
                  "description" : "boost",
                  "details" : [ ]
                },
                {
                  "value" : 0.6931472,
                  "description" : "idf, computed as log(1 + (N - n + 0.5) / (n + 0.5)) from:",
                  "details" : [
                    {
                      "value" : 1,
                      "description" : "n, number of documents containing term",
                      "details" : [ ]
                    },
                    {
                      "value" : 2,
                      "description" : "N, total number of documents with field",
                      "details" : [ ]
                    }
                  ]
                },
                {
                  "value" : 0.45454544,
                  "description" : "tf, computed as freq / (freq + k1 * (1 - b + b * dl / avgdl)) from:",
                  "details" : [
                    {
                      "value" : 1.0,
                      "description" : "freq, occurrences of term within document",
                      "details" : [ ]
                    },
                    {
                      "value" : 1.2,
                      "description" : "k1, term saturation parameter",
                      "details" : [ ]
                    },
                    {
                      "value" : 0.75,
                      "description" : "b, length normalization parameter",
                      "details" : [ ]
                    },
                    {
                      "value" : 1.0,
                      "description" : "dl, length of field",
                      "details" : [ ]
                    },
                    {
                      "value" : 1.0,
                      "description" : "avgdl, average length of field",
                      "details" : [ ]
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    }

4. Заключение К сожалению, нет подробного объяснения буст-фактора (проблема Elasticsearch), но из примера видно, что это единственное отличие в отношении оценки двух документов:

  • Shahid: _score: 0.57762265 / boost: 1.8333334
  • Shahib: _score: 0.46209806 / boost: 1.4666666
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...