我有一个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?另外,我应该考虑使用一个好的分析仪来实现这一目标吗?
我很难决定实施所需搜索的最佳途径。
答案 0 :(得分:1)
您的ID字段应该是未标记的,原因很简单,除非您编写自己的标记生成器,否则它不会被标记化(基于空格)。您可以对所有其他字段进行标记。
对项目名称执行短语查询,查找PhraseQuery或用双引号将项目名称括起来(这将使其完全匹配)。示例:“\”我喜欢的项目“\”
对于名称字段,简单查询应该可以正常工作。
不确定是否存在您想要组合字段的情况。在那种情况下查找BooleanQuery(允许你组合不同的查询boolean-ly)