Найдите n из m терминов с помощью Lucene и примените точность
Я использую Lucene и ищу наилучшие способы поиска сложных названий продуктов в контенте, созданном человеком. Имена, которые появляются в электронной торговле, часто бывают очень длинными и содержат, например: "имя_бренда имя-категории имя-модели имя_технологии номер версии". Однако люди, пишущие об этих продуктах, редко используют полное имя.
Поэтому для меня было бы идеально иметь поисковую систему, которая находит упоминания, например, 3 из 5 слов и применяет точность к результатам. Например, упоминания, содержащие полное имя вместе, будут иметь точность 1,0, упоминания, содержащие полное имя, но поменяемые слова будут иметь его меньше, упоминания, содержащие 4 или 3 из 5 слов, будут также обнаруживаться, но с еще меньшей точностью.
Возможно ли создать такую функциональность поверх Lucene с приемлемой производительностью?
1 ответ
Да. Вы можете использовать запрос фразы, чтобы найти все слова вместе. BooleanQuery
объединение терминов, которые вы хотите найти, будет искать любой из заданных терминов, причем предпочтение (более высокий балл) будет отдано тем результатам, которые соответствуют большему количеству условий запроса. BooleanQuery.setMinimumShouldMatch
Метод может использоваться, чтобы требовать, чтобы по крайней мере три условия соответствовали.
Все это очень легко сделать с помощью Solr и ElasticSearch, если вы смотрите в этом направлении.