Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/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
Java 为Lucene逃跑是行不通的_Java_Lucene - Fatal编程技术网

Java 为Lucene逃跑是行不通的

Java 为Lucene逃跑是行不通的,java,lucene,Java,Lucene,我正在为一个“id”字段等于“id:123456:789”的文档制作一个lucene查询 我正在传递“ID:123456:789”,但我已经确认QueryParser.escape会在字符串中的每个冒号之前添加转义。我尝试过使用两种不同的方法从转义字符串中创建查询,但都没有成功,但这两种方法都无法构建有效的查询来匹配id字段等于“id:123456:789”的文档 对于这两种方法,我都使用字符串的转义符来创建查询: String escapedSearchTerm= QueryParser.e

我正在为一个“id”字段等于“id:123456:789”的文档制作一个lucene查询

我正在传递“ID:123456:789”,但我已经确认QueryParser.escape会在字符串中的每个冒号之前添加转义。我尝试过使用两种不同的方法从转义字符串中创建查询,但都没有成功,但这两种方法都无法构建有效的查询来匹配id字段等于“id:123456:789”的文档


对于这两种方法,我都使用字符串的转义符来创建查询:

String escapedSearchTerm= QueryParser.escape("ID:123456:789"); // searchTerm = "ID\:123456\:789"

方法1:(结果查询中的第二个冒号变为空格)


方法2:(结果查询中的两个冒号都变为空格)



正如您所看到的,这两种方法都不能生成所需的查询。如何构建查询以匹配id字段完全等于字符串“id:123456:789”的文档。

QueryParser。escape
用于转义查询语法。它不打算绕过分析。在显示的示例中,您使用的是
StandardAnalyzer
。分析器将字符串“ID:123456:789”标记为三个术语:“ID”、“123456”、“789”。如果在索引时未使用
StandardAnalyzer
,则在构造查询时应使用适当的分析器

例如:

QueryParser parser = new QueryParser("text", new StandardAnalyzer());
Query query = parser.parse("default", "myfield:ID:123456:789");
我认为这会导致语法错误,原因很明显

QueryParser parser = new QueryParser("text", new StandardAnalyzer());
Query query = parser.parse("default", "myfield:" + QueryParser.escape("ID:123456:789"));
结果显示为“myfield:id myfield:123456 myfield:789”。冒号已正确转义,但随后通过分析将其删除。请注意这与

Query query = parser.parse("default", "myfield:ID 123456 789"));
这将导致“myfield:id默认值:123456默认值:789”

如果分析了您的字段:

那么,短语查询可能就是您正在寻找的解决方案:

QueryParser parser = new QueryParser("text", new StandardAnalyzer());
Query query = parser.parse("default", "myfield:\"ID:123456:789\""));
如果未分析您的字段:

您可以在QueryParser中使用关键字分析器:

QueryParser parser = new QueryParser("text", new KeywordAnalyzer());
Query query = parser.parse("default", "myfield:" + QueryParser.Escape("ID:123456:789")));
或者,您可以构建一个TermQuery:

Query query = new TermQuery("myfield", "ID:123456:789");
QueryParser parser = new QueryParser("text", new KeywordAnalyzer());
Query query = parser.parse("default", "myfield:" + QueryParser.Escape("ID:123456:789")));
Query query = new TermQuery("myfield", "ID:123456:789");