Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.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
Java 在Lucene索引中搜索特定术语_Java_Database_Lucene - Fatal编程技术网

Java 在Lucene索引中搜索特定术语

Java 在Lucene索引中搜索特定术语,java,database,lucene,Java,Database,Lucene,我正在尝试对Lucene索引进行搜索,我知道有一些特定的词被索引了,但结果不是很好 如何对特定术语(“129202”)执行查询?我尝试在字符串的开头添加加号,但没有成功 我的问题是: QueryParser q = new QueryParser(Version.LUCENE_42, "tags", new SimpleAnalyzer(Version.LUCENE_42)); Query query = q.parse("sapatilha feminina ramarim 129202 ci

我正在尝试对Lucene索引进行搜索,我知道有一些特定的词被索引了,但结果不是很好

如何对特定术语(“129202”)执行查询?我尝试在字符串的开头添加加号,但没有成功

我的问题是:

QueryParser q = new QueryParser(Version.LUCENE_42, "tags", new SimpleAnalyzer(Version.LUCENE_42));
Query query = q.parse("sapatilha feminina ramarim 129202 cinza");
下面是我想获取的一个索引文档(xml)

<?xml version="1.0" encoding="UTF-8"?>
<product>
 <tags>
   <tag>Sapatilha Pedras Preto</tag>
   <tag>ramarin</tag>
   <tag>ramarin 129202</tag>
   <tag>preto</tag>
 </tags>
 <id>71</id>
 <url>http://www.dafiti.com.br/Sapatilha-Pedras-Preto-1135428.html</url>
</product>

萨帕蒂拉佩德拉斯普雷托酒店
拉马林
拉马林129202
普雷托
71
http://www.dafiti.com.br/Sapatilha-Pedras-Preto-1135428.html
,您用来查询(我假设是索引)的分析器使用,根据文档:

…将标记定义为相邻字母的最大字符串,如java.lang.Character.Isleter()所定义

也就是说,不是数字。此分析器将完全丢失数字。我建议您研究另一种方法,例如or


证明:

StringReader reader = new StringReader("ramarim 129202 cinza");
LetterTokenizer stream = new LetterTokenizer(Version.LUCENE_42, reader);        
stream.setReader(reader);
stream.reset();
while(stream.incrementToken()) {
    System.out.println(stream.reflectAsString(false));
}
stream.close();
产出:

term=ramarim,bytes=[72 61 6d 61 72 69 6d],startOffset=19,endOffset=26
term=cinza,bytes=[63 69 6e 7a 61],startOffset=34,endOffset=39
替换
StandardTokenizer
(由
StandardAnalyzer
使用)将获得:

term=ramarim,bytes=[72 61 6d 61 72 69 6d],startOffset=19,endOffset=26,positionIncrement=1,type=<ALPHANUM>
term=129202,bytes=[31 32 39 32 30 32],startOffset=27,endOffset=33,positionIncrement=1,type=<NUM>
term=cinza,bytes=[63 69 6e 7a 61],startOffset=34,endOffset=39,positionIncrement=1,type=<ALPHANUM>
term=ramarim,bytes=[72 61 6d 61 72 69 6d],startOffset=19,endOffset=26,positionIncrement=1,类型=
term=129202,bytes=[31 32 39 32 30 32],startOffset=27,endOffset=33,positionIncrement=1,类型=
term=cinza,字节=[63 69 6e 7a 61],startOffset=34,endOffset=39,positionIncrement=1,类型=
,您用来查询(我假设是索引)的分析器使用,根据文档:

…将标记定义为相邻字母的最大字符串,如java.lang.Character.Isleter()所定义

也就是说,不是数字。此分析器将完全丢失数字。我建议您研究另一种方法,例如or


证明:

StringReader reader = new StringReader("ramarim 129202 cinza");
LetterTokenizer stream = new LetterTokenizer(Version.LUCENE_42, reader);        
stream.setReader(reader);
stream.reset();
while(stream.incrementToken()) {
    System.out.println(stream.reflectAsString(false));
}
stream.close();
产出:

term=ramarim,bytes=[72 61 6d 61 72 69 6d],startOffset=19,endOffset=26
term=cinza,bytes=[63 69 6e 7a 61],startOffset=34,endOffset=39
替换
StandardTokenizer
(由
StandardAnalyzer
使用)将获得:

term=ramarim,bytes=[72 61 6d 61 72 69 6d],startOffset=19,endOffset=26,positionIncrement=1,type=<ALPHANUM>
term=129202,bytes=[31 32 39 32 30 32],startOffset=27,endOffset=33,positionIncrement=1,type=<NUM>
term=cinza,bytes=[63 69 6e 7a 61],startOffset=34,endOffset=39,positionIncrement=1,type=<ALPHANUM>
term=ramarim,bytes=[72 61 6d 61 72 69 6d],startOffset=19,endOffset=26,positionIncrement=1,类型=
term=129202,bytes=[31 32 39 32 30 32],startOffset=27,endOffset=33,positionIncrement=1,类型=
term=cinza,字节=[63 69 6e 7a 61],startOffset=34,endOffset=39,positionIncrement=1,类型=

“结果不是很好”--你需要更具体一些。“结果不是很好”--你需要更具体一些。tks。。。我用StandardAnalyzer重新创建了索引,它可以正常工作。。。我用StandardAnalyzer重新创建了索引,它可以正常工作。