#java #lucene
#java #lucene
Вопрос:
Я создал lucene в java index и могу выполнять поиск. Теперь я хочу, чтобы мой запрос был таким, чтобы он поддерживал порядок. Скажем, например, у меня в моем индексе есть следующее
1 2 3 4 5
1 2 3 4 1
1 2 4 3 1
1 3 2 4 1
И мой запрос 1 3 4
тогда он должен дать результат, подобный :
1 2 3 4 5
1 2 3 4 1
1 3 2 4 1
1 2 4 3 1
Надеюсь, вопрос ясен.
Спасибо, Рави.
Ответ №1:
Вы можете использовать span query для поиска терминов, которые находятся в непосредственной близости и в определенном порядке. Условие упорядочения может быть смягчено. Отличную статью о spans можно найти здесь.
Комментарии:
1. На мой взгляд, это выглядит неплохо. Все еще нужен способ создать запрос: Изначально я использовал «Запрос q1 = новый запрос (версия. LUCENE_CURRENT, «Id», анализатор).parse(dis.readLine());» Если я использую запрос SpanQuery, будет что-то вроде «SpanNearQuery q = новый запрос SpanNearQuery(новый запрос SpanQuery[] { новый запрос SpanTermQuery(новый термин («Id»,»1″)),новый запрос SpanTermQuery(новый термин («Id», «2»))},5000, верно);». Как я могу разобрать запрос за один раз из файла. Мой запрос будет иметь длину «1 2 3» или «1 3 4 5» и т.д.
Ответ №2:
Можете ли вы использовать BooleanQuery и обязательно вызвать setAllowDocsOutOfOrder(true)
. Если ваш индекс упорядочен по docid, это должно предотвратить беспорядок в документах.
Редактировать: Вы также могли бы использовать Sort
класс для упорядочивания поиска по индексу или релевантности. Это выглядит более полезным, поскольку вы можете использовать любой тип запроса в своем поиске.
Комментарии:
1. когда я использую setAllowDocsOutOfOrder (true), он выдает символ «не удается найти». чего я не понимаю? Также, как здесь полезна сортировка, мой запрос также может быть 1 4 3, и в этом случае последний полученный, т. е. 1 2 4 3 1 должен быть первым.
2. О, я неправильно понял ваш вопрос. Теперь кажется, что вы хотите, чтобы обращения были отсортированы таким образом, чтобы отношения перед термином в документах соответствовали порядку терминов в запросе. Я думал, вы имели в виду, что порядок по идентификатору документа будет сохранен. Похоже, вам следует определить свой собственный метод подсчета очков.