Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Search 使用不同分析仪索引lucene文档_Search_Indexing_Lucene_Full Text Search - Fatal编程技术网

Search 使用不同分析仪索引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,新的自定义分析器); 我计划有一个自定义分析仪,它支持标准分析仪除小写过滤器外的所有过滤器。 当我试图从索引中搜索结果时,我想我们最终可能会得到重复的结果 有什么意见/想法吗 编辑: @西蒙 您的示例代码

可以用两个不同的分析仪索引lucene文档吗?我需要同时支持区分大小写和不区分大小写的搜索。所以我想知道我是否可以用两个分析仪来处理同一份文件


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)