Как выполнить сортировку по полю Lucene.Net и игнорировать общие стоп-слова, такие как «a» и «the»?
-
09-06-2019 - |
Вопрос
Я нашел, как сортировать результаты запроса по заданному полю в индексе Lucene.Net, а не по баллам;все, что для этого нужно, — это поле, которое проиндексировано, но не токенизировано.Однако мне не удалось понять, как отсортировать это поле, игнорируя стоп-слова, такие как «a» и «the», чтобы, например, следующие названия книг сортировались в порядке возрастания следующим образом:
- Кот в мешке
- Хортон слышит кто
Возможно ли такое, и если да, то как?
Я использую Lucene.Net 2.3.1.2.
Решение
Я помещаю результаты, возвращаемые Lucene, в свою собственную коллекцию пользовательских объектов.Затем я могу заполнить его дополнительной информацией/контекстной информацией (и использовать такие вещи, как класс выделения, чтобы извлечь фрагмент совпадений), а также добавить разбивку по страницам.Если вы выбрали аналогичный путь, вы могли бы создать класс/объект «результата», добавить что-то вроде свойства SortBy и получить любое поле, по которому вы хотите отсортировать, удалить все стоп-слова, а затем сохранить его в этом свойстве.Теперь просто отсортируйте коллекцию на основе этого свойства.
Другие советы
Когда вы создаете свой индекс, создайте поле, содержащее только те слова, по которым вы хотите отсортировать, а затем при извлечении выполните сортировку по этому полю, но отобразите полный заголовок.
Прошло много времени с тех пор, как я использовал Lucene, но я предполагаю, что нужно добавить туда дополнительное поле для сортировки и хранения значения с уже удаленными стоп-словами.Вероятно, вы можете использовать те же анализаторы для генерации этого значения.
Кажется, есть подвох 22: вы должны маркировать поле с помощью анализатора, чтобы удалить знаки препинания и стоп-слова, но вы не можете сортировать токенизированные поля.Как тогда убрать стоп-слова без токенизации?
По поиску нашел поиск по индексу lucene .net с опцией сортировки ссылка интересна для решения твоей проблемы