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

Lucene StandardAnalyzer-查询短语中有多个空格,lucene,luke,Lucene,Luke,在索引过程中创建org.apache.lucene.document.document时,我创建了一个org.apache.lucene.document.StringField,其中有多个空格,例如ID_uuuuuuu45_2013。我使用org.apache.lucene.analysis.standard.StandardAnalyzer创建索引并查询它 当使用带有多个空格的短语查询索引时,例如ID_uu45_2013,其中u是一个空格,我得到一个空结果 我使用检查了我的查询,我意识到多个

在索引过程中创建org.apache.lucene.document.document时,我创建了一个org.apache.lucene.document.StringField,其中有多个空格,例如ID_uuuuuuu45_2013。我使用org.apache.lucene.analysis.standard.StandardAnalyzer创建索引并查询它

当使用带有多个空格的短语查询索引时,例如ID_uu45_2013,其中u是一个空格,我得到一个空结果

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


我应该怎么做才能在查询短语中使用多个空格并得到正确的结果

使用关键字分析器进行索引和搜索


使用关键字分析器进行索引和搜索


问题不仅仅是多个空间。如果只有单个空格,则查询将被标记化,而索引数据则不会被标记化,因为它是使用StringField创建的。您将搜索令牌ID 452013,而不是单个令牌ID 452013,这仍然不会得到任何结果

您可以将该字段保留为StringField,并将QueryParser使用的分析器设置为aKeywordAnalyzer。当然,您仍然需要注意查询语法,但是引用前面提到的字符串应该可以做到这一点

我认为,查询StringFields的更好方法是自己构造。这样您就不必担心分析器了。只需创建如下查询:

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

如果您希望使用前面提到的短语查询,也可以使用文本字段,在本例中,使用与查询StandardAnalyzer相同的分析器进行分析。这将提供更多的自由文本搜索功能,如果这是你正在寻找的。在我看来,这不是理想的表示形式,但供您考虑。

问题不仅仅是多个空格。如果只有单个空格,则查询将被标记化,而索引数据则不会被标记化,因为它是使用StringField创建的。您将搜索令牌ID 452013,而不是单个令牌ID 452013,这仍然不会得到任何结果

您可以将该字段保留为StringField,并将QueryParser使用的分析器设置为aKeywordAnalyzer。当然,您仍然需要注意查询语法,但是引用前面提到的字符串应该可以做到这一点

我认为,查询StringFields的更好方法是自己构造。这样您就不必担心分析器了。只需创建如下查询:

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

如果您希望使用前面提到的短语查询,也可以使用文本字段,在本例中,使用与查询StandardAnalyzer相同的分析器进行分析。这将提供更多的自由文本搜索功能,如果这是你正在寻找的。在我看来,这不是理想的表示形式,但供您考虑。

我没有在该字段中使用任何分析仪。我不想要它。它应该被索引,然后我应该能够使用短语查询找到它,就像在我的问题中描述的那样。我不使用任何分析器来分析这个字段。我不想要它。它应该被索引,然后我应该能够使用短语查询找到它,就像我的问题中描述的那样。