Solr / Lucene:评分个人标签

时间:2013-03-13 17:32:46

标签: search solr lucene ranking information-retrieval

我正在设计一个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);

如果我将所有标签添加到同一字段,我该如何考虑排名?

1 个答案:

答案 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 ...还有一件事,添加很多字段会使文档索引器变慢并且索引更大(可能不适合搜索)。