Lucene Analyzer使用特殊字符和标点符号?

时间:2010-04-29 02:19:15

标签: c# indexing lucene lucene.net

我有一个Lucene索引,其中包含多个文档。每个文档都有多个字段,例如:

Id
Project
Name
Description

Id字段将是唯一标识符,例如GUID,Project是用户的ProjectID,用户只能查看其项目的文档,Name和Description包含可以包含特殊字符的文本。

当用户在名称字段上执行搜索时,我希望能够尝试匹配我能做的最好的事情,例如:

First

将同时返回:

First.Last 

First.Middle.Last

名称也可以是:

Test (NameTest)

如果用户输入'Test','Name'或'(NameTest)',他们就可以找到结果。

但是,如果我说项目是“ProjectA”,则需要完全匹配(不区分大小写的搜索)。 Id字段也是如此。

我应该将哪些字段设置为Tokenized,哪些字段设置为Untokenized?另外,我应该考虑使用一个好的分析仪来实现这一目标吗?

我很难决定实施所需搜索的最佳途径。

1 个答案:

答案 0 :(得分:1)

您的ID字段应该是未标记的,原因很简单,除非您编写自己的标记生成器,否则它不会被标记化(基于空格)。您可以对所有其他字段进行标记。

对项目名称执行短语查询,查找PhraseQuery或用双引号将项目名称括起来(这将使其完全匹配)。示例:“\”我喜欢的项目“\”

对于名称字段,简单查询应该可以正常工作。

不确定是否存在您想要组合字段的情况。在那种情况下查找BooleanQuery(允许你组合不同的查询boolean-ly)