C# Lucene分析器用于特殊字符和标点符号?

C# Lucene分析器用于特殊字符和标点符号?,c#,indexing,lucene,lucene.net,C#,Indexing,Lucene,Lucene.net,我有一个Lucene索引,里面有几个文档。每个文档都有多个字段,例如: Id Project Name Description Id字段将是一个唯一标识符,例如GUID,Project是用户的ProjectID,用户只能查看其项目的文档,并且名称和说明包含可以具有特殊字符的文本 当用户在“名称”字段上执行搜索时,我希望能够尝试匹配最佳匹配,例如: First 将同时返回: First.Last 及 名称也可以类似于: Test (NameTest) 其中,如果用户键入“Test”、“N

我有一个Lucene索引,里面有几个文档。每个文档都有多个字段,例如:

Id
Project
Name
Description
Id字段将是一个唯一标识符,例如GUID,Project是用户的ProjectID,用户只能查看其项目的文档,并且名称和说明包含可以具有特殊字符的文本

当用户在“名称”字段上执行搜索时,我希望能够尝试匹配最佳匹配,例如:

First
将同时返回:

First.Last 

名称也可以类似于:

Test (NameTest)
其中,如果用户键入“Test”、“Name”或“(NameTest)”,则可以找到结果

然而,如果我说这个项目是“ProjectA”,那么它需要精确匹配(不区分大小写的搜索)。Id字段也是如此

哪些字段应设置为标记化字段,哪些字段应设置为未标记化字段?还有,我应该考虑一个好的分析器来实现这一点吗?
我一直在努力确定实现所需搜索的最佳路径。

您的ID字段应该未标记,原因很简单,因为它似乎没有标记,除非您编写自己的标记器,否则它可以标记(基于空格)。您可以标记所有其他字段

对项目名称执行短语查询、查找短语查询或将项目名称括在双引号中(这将使其完全匹配)。示例:“\“我的幻想项目”\”

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


不确定是否存在需要字段组合的情况。在这种情况下,查找BooleanQuery(它允许您以布尔方式组合不同的查询)

我确实计划能够对“test”之类的名称和描述执行布尔查询。在这种情况下,我希望返回在任一字段中包含test的所有文档。我希望我的查询以项目Id为范围。例如:(名称或描述包含“test”)和项目Id=3(精确匹配),我假设项目Id将不可标记,并且名称和描述将使用标准分析器标记。使用QueryParser类的标准布尔查询能达到我的目标吗?是的,上述方法应该有效。如果您的项目id可能只是一个数字或某个标识符(Lucene术语中的“术语”),您可以使用TermQuery。插入标记化字段时,我会转义特殊字符。使用QueryParser执行搜索时,在使用StandardAnalyzer执行搜索之前,我会先转义搜索值。一个问题是,如果我的索引中有两个对象,它们的名称分别是“Test”和“Test(Test)”,那么当我搜索“Test(Test)”并转义特殊字符时,我会返回这两个对象。我知道它正在从我的输入中创建两个术语“Test”和“\(Test\)”,但它为什么同时得到这两个术语却毫无意义。我应该补充一点,我想象它将对术语执行“and”操作,以将文档与满足所有术语条件的字段/值对相匹配。
Test (NameTest)