0

我正在设计一个 Lucene 搜索索引,其中包括每个文档的排名标签。

例子:

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

标签来自自动分类算法,该算法也分配了分数。

如何设计索引以便查询标签组合并返回最相关的结果?例子,搜索java+learning

我最初为每个标签创建了一个 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);

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

4

1 回答 1

0

我在搜索中也遇到了这个问题...如果我错了请告诉我...

好的是如果你可以让像“标签”这样的字段包含值“java learning bugs architecture”并且你使用WhiteSpaceTokenizer:

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

但是这样做你不能支持每个单词,你可以提升“标签”字段......

当用户搜索“java bugs”或“architecture in java”时,Lucene 不会给出很好的评分,但会返回所有包含此词的文档。

但是你可以像你说的那样做很多“标签”并提升每一个......或者你可以创建一个新的查询解析器http://today.java.net/pub/a/today/2003/11/07 /QueryParserRules.html继承 edismax(例如)以使字段按您的意愿工作。

那是你要的吗?

哦...还有一件事,添加很多字段会使文档索引器变慢并且索引更大(可能不好搜索)。

于 2013-03-15T16:29:11.693 回答