2013-03-13 3 views
0

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

Пример:

Document 1 
tag: java , rank 1.2 
tag: learning, rank 2.1 
tag: bugs, rank 1.2 
tag: architecture: rank 0.3 

Теги приходит из автоматизированного алгоритма классификации, которая также присвоения баллов.

Как создать индекс, чтобы я мог запросить поиск комбинации тегов и вернуть наиболее релевантные результаты? Например, поиск java + обучения

Я изначально создал поле для каждого тега и использовал ранг для увеличения поля для каждого документа. Это хороший подход с точки зрения производительности? Что делать, если у меня есть 10 000 возможных тегов? Хорошо ли иметь 10 000 ПОЛЕЙ в Луцене?

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

ответ

0

Я имел эту проблему в моем поиске тоже ... Скажи мне, если я ошибаюсь ...

Хорошо было, если вы могли бы иметь одно поле, как «Теги» содержит значение «Java обучения ошибки архитектуры "и вы используете WhiteSpaceTokenizer:

http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.WhitespaceTokenizerFactory

Но при этом вы не в состоянии BOST каждые слова, вы можете увеличить поле„Тег“...

Выполнение этого Lucene не будет дать хороший выигрыш при поиске пользователем f или «java bugs» ou «архитектура в java», но вернет все документы, которые имеют эти слова.

Но вы можете сделать, как вы сказали, много «тегов» и поднять каждый из них ... Или вы можете собрать новый запрос Parser http://today.java.net/pub/a/today/2003/11/07/QueryParserRules.html наследования edismax (например), чтобы создать поле, как вы хотите.

Это то, что вы хотите?

Ow ... Еще одна вещь, добавив много полей, сделает индексирование docs медленнее и индексирует больше (вероятно, не очень удобно искать).

Смежные вопросы