Повышение условий Lucene при построении индекса - PullRequest
6 голосов
/ 16 января 2012

Можно ли определить, что определенные термины важнее других при создании индекса (а не при его запросе)?

Рассмотрим, например, фильтр синонимов:
doc 1: "этохорошая машина "
документ 2:" это хорошая машина "

Я хочу добавить термин автомобиль к первому документу и термин автомобиль ко второму документу, но я хочу, чтобы, если позже, индексзапрашивается со словом car, тогда первый документ оценивается выше, чем второй, и если запрашивается для транспортного средства, будет наоборот.

Будет вызывать setBoost для полей перед добавлением их в соответствующие документысделать трюк?

Или, может быть, я должен добавить синонимы к другому имени поля?

Или я смотрю на это с неправильной точки зрения?

Спасибо

1 Ответ

4 голосов
/ 16 января 2012

Настройка boost для поля влияет на все термины в этом поле, поэтому в вашем случае это не сработает.

Но это должно быть возможно с использованием полезных нагрузок Lucene (байтовый массив, который можно установить для каждого термина),Вы могли бы использовать их, чтобы установить специальные термины (например, 0.5 для документа 1).Затем вы будете реализовывать свой собственный метод Similarity и переопределять scorePayload() для декодирования этого повышения, а затем использовать PayloadTermQuery, который позволит вам внести свой вклад в оценку, основываясь на ботинках, которые у вас есть в полезной нагрузке для этого термина.

...