Search 使用不同分析仪索引lucene文档
可以用两个不同的分析仪索引lucene文档吗?我需要同时支持区分大小写和不区分大小写的搜索。所以我想知道我是否可以用两个分析仪来处理同一份文件Search 使用不同分析仪索引lucene文档,search,indexing,lucene,full-text-search,Search,Indexing,Lucene,Full Text Search,可以用两个不同的分析仪索引lucene文档吗?我需要同时支持区分大小写和不区分大小写的搜索。所以我想知道我是否可以用两个分析仪来处理同一份文件 writer.addDocument(doc,新标准分析器(Version.LUCENE_30)); writer.addDocument(doc,新的自定义分析器); 我计划有一个自定义分析仪,它支持标准分析仪除小写过滤器外的所有过滤器。 当我试图从索引中搜索结果时,我想我们最终可能会得到重复的结果 有什么意见/想法吗 编辑: @西蒙 您的示例代码
writer.addDocument(doc,新标准分析器(Version.LUCENE_30));
writer.addDocument(doc,新的自定义分析器);
我计划有一个自定义分析仪,它支持标准分析仪除小写过滤器外的所有过滤器。
当我试图从索引中搜索结果时,我想我们最终可能会得到重复的结果
有什么意见/想法吗
编辑:
@西蒙
您的示例代码将向索引中添加两个几乎相同的文档(除了大小写)
在一个文档中添加两个字段如何,一个区分大小写,另一个不区分大小写?您可以使用
PerFieldAnalyzer
进行此操作。@Simon,当我尝试将相同的内容添加到两个不同的feld时,我遇到了一个流关闭异常…如何解决此问题?听起来您好像在两次添加相同的令牌流?在处理纯字符串时,我从未见过这种错误。我需要看一些代码来调试它,最好是在添加Fieldable(通常是Field)的地方。我不知道该方法的内部工作原理,但我猜它会两次返回相同的读卡器/流。在插入“内容”时从中读取,在读取“CaseSensitiveContent”的数据时处理。是否可以直接为字符串编制索引?比如newfield(“…”,parser.getText(),TermVector.YES)
或者其他什么?好的..解析器方法是一个HTML解析器,它解析HTML文件。它剥离了HTML标记,并提供了读卡器流。您认为可以将流读入不同的读取器obj并将该流传递给字段吗?首先尝试创建两个html解析器实例,每个字段一个。这应该表明这是问题所在,还是有其他问题。
Analyzer defaultAnalyzer = new StandardAnalyzer(Version.LUCENE_30);
PerFieldAnalyzerWrapper wrapper = new PerFieldAnalyzerWrapper(defaultAnalyzer);
wrapper.addAnalyzer("CaseSensitiveContents", new WhitespaceAnalyzer());
writer = new IndexWriter(FSDirectory.open(index), wrapper, true,
new IndexWriter.MaxFieldLength(100))
doc.add(new Field("contents", parser.getReader(), TermVector.YES));
doc.add(new Field("CaseSensitiveContents", parser.getReader(), TermVector.YES));
writer.add(doc)