Почему более точное совпадение получает более низкий балл, чем менее точное совпадение при полнотекстовом поиске вasticsearch? - PullRequest
0 голосов
/ 30 октября 2018

У меня есть некоторые данные, которые я ищу из эластичного поиска, поскольку он обеспечивает лучший полнотекстовый поиск по сравнению с MongoDB. Но я сталкиваюсь с некоторыми проблемами, и одна из них:

Мои данные сохранены в эластичном поиске, как:

[{
   "word": "tidak berpuas hati",
   "type": "NEGATIVE",
   "score": -0.3908697916666666
  },{
   "word": "berpuas hati",
   "type": "POSITIVE",
   "score": 0.65375
  },{
   "word": "hati",
   "type": "POSITIVE",
   "score": 0.6
  },{
   "word": "tidak",
   "type": "NEGATIVE",
   "score": 0.6
}] 

Но когда я ищу предложение saya tidak berpuas hati в этих данных. Я получаю ответ примерно так:

"hits": [
 {
    "_index": "sentiment",
    "_type": "ms",
    "_id": "8SPiimYBKsyQt_Jg1VYa",
    "_score": 8.838576,
    "_source": {
       "word": "berpuas hati",
       "type": "POSITIVE",
       "score": 0.65375
    },
    "highlight": {
       "word": [
          "<em>berpuas</em> <em>hati</em>"
       ]
    }
 },
 {
    "_index": "sentiment",
    "_type": "ms",
    "_id": "PiPiimYBKsyQt_Jg1U4U",
    "_score": 8.774891,
    "_source": {
       "word": "tidak berpuas hati",
       "type": "NEGATIVE",
       "score": -0.3908697916666666
    },
    "highlight": {
       "word": [
          "<em>tidak</em> <em>berpuas</em> <em>hati</em>"
       ]
    }
 },
 {
    "_index": "sentiment",
    "_type": "ms",
    "_id": "ByPiimYBKsyQt_Jg1VUZ",
    "_score": 5.045017,
    "_source": {
       "word": "hati",
       "type": "POSITIVE",
       "score": 0.6
    },
    "highlight": {
       "word": [
          "<em>hati</em>"
       ]
    }
  }
]

Это мой запрос:

query = {
            "from": 0,
            "size": 20,
            "query": {
                "match": {
                    "word": {
                        "query": term,
                        "operator": 'or',
                        "fuzziness": 'auto'
                    }
                }
            },
            "highlight": {
                "fields": {
                    "word": {}
                }
            }
        }

Итак, проблема в том, что я не понимаю, почему оценка tidak berpuas hati не выше berpuas hati. Когда я изменяю значение from на 1, оно начинает работать для этого предложения и останавливается для предложений из одного слова.

1 Ответ

0 голосов
/ 31 октября 2018

Результаты Elasticsearch рассчитываются для каждого шарда.

В этом случае документ с berpuas hati получает более высокий балл, так как в его осколке он несколько более актуален, чем документ с tidak berpus hati.

Релевантность в Elasticsearch определяется несколькими факторами, хотя здесь я бы сказал, что причина в том, что внутри tidak berpuas hati -шарда имеется больше документов, содержащих один (или более) терминов tidak berpuas или hati, чем в berpuas hati -шарде. Что является совпадением.

Если вы попытаетесь выполнить тот же запрос для индекса, который содержит только эти два документа, вы увидите, что berpuas hati получает оценку около 0,5, а tidak berpuas hati получает оценку около 0,75.

Вы можете найти объяснение того, как баллы стали точными, добавив "explain": true к вашему запросу. Алгоритм оценки объясняется здесь: https://www.elastic.co/guide/en/elasticsearch/guide/current/scoring-theory.html

Вы также можете прочитать это: https://www.elastic.co/guide/en/elasticsearch/guide/current/relevance-is-broken.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...