Lucene теперь использует BM25 , который имеет измененный наклон по сравнению со старой практической формулой оценки tf / idf.
Когда вы индексируете документы (помещая их в индекс Lucene), каждыйПоле разбито на токены.Как это происходит и что считается токеном, зависит от определения поля.Например, если вы решите использовать токены на пустом месте и применить фильтр нижнего регистра, значение «Foo Bar» будет сохранено как два токена, foo
и bar
.Если вы не применяете токенизацию (или не используете KeywordTokenizer) и не применяете никаких фильтров, вы получите один токен - Foo Bar
).
Тот же процесс происходит, когда вы делаете запрос.Запрос, отправленный в поле, разбивается на токены и фильтруется в соответствии с правилами для этого поля, поэтому, если вы выполните поиск fOO bAR
в приведенном выше примере, запрос будет состоять из двух токенов после обработки: foo
и bar
.
Оценка для документа затем рассчитывается в соответствии с этими токенами по формуле BM25.Если вы посмотрите на формулу, вы увидите, что счет рассчитывается для каждого токена (q), а затем суммируется, чтобы получить оценку для поля.
![BM25 scoring formula from Wikipedia](https://i.stack.imgur.com/VBzV2.png)
Если вы добавите debugQuery=true
после запроса к Solr, вы получите подробную информацию о том, как именно рассчитывается оценка.