1

org.apache.lucene.document.Document在索引期间创建时,我创建一个org.apache.lucene.document.StringField有多个空格的,例如“ID____45_2013”​​。我org.apache.lucene.analysis.standard.StandardAnalyzer用于创建索引和查询它。

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

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

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

4

2 回答 2

4

问题不仅仅是多个空格。如果您只有单个空格,则您的查询将被标记,而索引数据则不会(因为它是使用 a 创建的StringField)。您将搜索 tokens ID, 45, 2013vs single token ID 45 2013,但仍然没有结果。

您可以将该字段保留为StringField,并将 QueryParser 使用的分析器设置为KeywordAnalyzer。当然,您仍然需要注意查询语法,但引用提到的字符串应该可以解决问题。

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

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

你也可以,如果你想使用你提到的短语查询,你应该使用一个 TextField,使用与查询相同的分析器进行分析(StandardAnalyzer在这种情况下)。如果您正在寻找,这将提供更多的自由文本搜索功能。在我看来,这不是所需的表示,但供您考虑。

于 2013-07-25T15:56:27.120 回答
0

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

http://lucene.apache.org/core/3_0_3/api/all/org/apache/lucene/analysis/KeywordAnalyzer.html

于 2013-07-25T09:44:01.687 回答