使用Examine和Lucene.Net查询逗号分隔的ID列表?

时间:2011-02-26 00:27:41

标签: lucene lucene.net

我正在使用Examine for Umbraco(它建立在Lucene.net之上)来进行搜索。我很确定我的问题与Lucene有关。

我的一个字段包含以逗号分隔的ID列表。如何以正确的方式查询此字段?

EG。我有一个值为“64,65”的字段。我尝试过使用MultipleCharacterWildcard,它只返回一个结果,如果我查询ID 64,而不是ID 65. SingleCharacterWildcard不返回任何内容,而Fuzzy只返回一些内容,如果字段中只有一个ID。有关如何进行正确搜索的任何想法?我想我要找的是“包含” - 查询。

这也是使用逗号分隔列表处理字段的正确方法,还是最好将逗号分隔列表拆分为单个字段?

2 个答案:

答案 0 :(得分:4)

我当然会将列表分成不同的字段。您可以在文档中为同一个字段名称设置多个值,这是表示一组值的一种非常自然的方式:

venue_id: 12345
treatment_id_set: 1234
treatment_id_set: 2345

使用这样的文件,我可以简单地查询“treatment_id_set:1234”以查找支持该治疗的所有场所。当然,治疗的顺序丢失了。如果需要恢复它,请在索引各个成员时存储逗号分隔值:

# stored, indexed
venue_id: 12345
# stored, not indexed
treatment_id_list: 1234,2345
# not stored, indexed
treatment_id_set: 1234
treatment_id_set: 2345

答案 1 :(得分:0)

为了使用Umbraco Examine将具有相同键值的重复字段添加到Lucene中,您需要依赖于'文档写作'事件

_index.DocumentWriting += _index_DocumentWriting;

然后,这将公开底层的Lucene文档。

然后可以像这样添加字段:

foreach (var item in someList)
                {
                    e.Document.Add(new Field("fieldName", item, Field.Store.YES, Field.Index.NOT_ANALYZED));
                }