Lucene StandardAnalyzer - 查询短语中的多个空格

时间:2013-07-25 08:14:20

标签: lucene luke

在建立索引期间创建org.apache.lucene.document.Document时,我创建了一个org.apache.lucene.document.StringField,其中包含多个空格,例如“ID____45_2013”​​。我使用org.apache.lucene.analysis.standard.StandardAnalyzer来创建索引并查询它。

使用包含多个空格的短语查询索引时,例如“ID__45_2013”​​(其中_是空格)我得到一个空的结果。

我使用luke检查了我的查询,并意识到多个空格被解析为一个空格。

如何才能在查询词组中使用多个空格并获得正确的结果?

2 个答案:

答案 0 :(得分:4)

问题不仅仅是多个空间。如果您只有一个空格,那么您的查询将被标记化,而索引数据则不会(因为它是使用StringField创建的)。您将搜索令牌ID452013与单个令牌ID 45 2013,这样仍然无法获得结果。

您可以将该字段保留为StringField,并将QueryParser使用的Analyzer设置为KeywordAnalyzer。当然,你仍然需要小心查询语法,但引用上面提到的字符串应该可以解决问题。

我认为,查询StringFields的更好方法是自己构建TermQuery。这使您无需担心分析仪。只需创建如下查询:

Query query = new TermQuery(new Term("id", "ID   45 2013"));

您还可以,如果您希望使用类似于您所提到的短语查询,则应使用TextField,使用与查询相同的分析器进行分析(StandardAnalyzer,在此情况下)。这将提供更多的自由文本搜索功能,如果这是您正在寻找的。我并不认为这是所希望的代表,而是供你考虑。

答案 1 :(得分:0)