美好的一天!
在我的文档中,我有一个日期字段,其中包含 ISO-8601 日期,该字段也可以是" 25- 08-2016 / P1D"
我想搜索一个具有这个日期或期间的文档 - 所以,只需要具有相同的值" date"领域。不幸的是,我无法做到这一点。尝试了不同的查询字符串,包括转义或不转义,如
我做错了什么?如何告诉Lucene使用简单的字符串匹配搜索此字段,而不进行任何标记化?
答案 0 :(得分:0)
经过一些研究,我得到了,转义查询字符串是错误的方法 - 正确的方法是自定义查询分析器的必要字段(在我的情况下为“日期”)。
Map<String, Analyzer> analyzerPerField = new HashMap<String, Analyzer>();
analyzerPerField.put("date", new WhitespaceAnalyzer());
analyzer = new PerFieldAnalyzerWrapper(
new StandardAnalyzer(), analyzerPerField);
parser = new QueryParser("title", analyzer);
在给定的代码中,我们只使用 WhitespaceAnalyzer (用空格划分查询)而不是默认使用的 SimpleAnalyzer ,它将文本除以非字母。 WhitespaceAnalyzer 不会破坏ISO-8601日期。
有关lucene中自定义分析/标记化的其他详细信息,请参阅例如http://www.hascode.com/2014/07/lucene-by-example-specifying-analyzers-on-a-per-field-basis-and-writing-a-custom-analyzertokenizer/