我正在设计一个Lucene搜索索引,其中包含每个文档的排名标记。
示例:
Document 1
tag: java , rank 1.2
tag: learning, rank 2.1
tag: bugs, rank 1.2
tag: architecture: rank 0.3
标签来自自动分类算法,该算法也会分配分数。
如何设计索引以便我可以查询搜索标签组合并返回最相关的结果?例如,搜索java +学习
我最初为每个标签创建了一个FIELD,并使用等级来增加每个文档的字段。这在性能方面是一个好方法吗?如果我有10,000个可能的标签怎么办?在Lucene拥有10,000个FIELDS是个好主意吗?
Field tag = new Field(
FIELD_TAG+tag.getId(),
"y",
Field.Store.NO,
Field.Index.NOT_ANALYZED);
tag.setBoost(tag.getRank());
luceneDoc.add(tag);
如果我将所有标签添加到同一字段,我该如何考虑排名?
答案 0 :(得分:0)
我的搜索也遇到了这个问题...告诉我,如果我错了......
好的是,如果你有一个像“Tags”这样的字段包含值“java learning bugs architecture”并且你使用的是WhiteSpaceTokenizer:
http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.WhitespaceTokenizerFactory
但是这样做你无法用每个单词来表达,你可以提升字段“标签”......
当用户搜索“java bugs”ou“java in java”时,Lucene不会给出好的评分,但会返回所有包含此词的文档。
但你可以像你说的那样做,很多“标签”并提升每一个......或者你可以创建一个新的Query Parser http://today.java.net/pub/a/today/2003/11/07/QueryParserRules.html继承edismax(例如)来使一个字段像你一样工作想。
这就是你想要的吗?
Ow ...还有一件事,添加很多字段会使文档索引器变慢并且索引更大(可能不适合搜索)。