1

无法正确使用 lucene 的关键字分析器,

    String term = "new york";
    // id and location are the fields in which i want to search the "term"
    MultiFieldQueryParser queryParser = new MultiFieldQueryParser(
                                       Version.LUCENE_30,
                                       {"id", "location"},
                                       new KeywordAnalyzer());
    Query query = queryParser.parse(term);
    System.out.println(query.toString());

OUTCOME: (id:new location:new) (id:york location:york)

预期结果: (id:new york location:new york) (id:new york location:new york)

请帮我确定我在这里做错了什么?

4

1 回答 1

4

你没有做错什么。这就是 QueryParser 的工作方式。由于您使用 KeywordAnalyzer 将文本索引为单个标记,因此您应该使用 TermQuery。由于您有两个要搜索的字段,因此您可以组合两个 TermQueries,例如:

BooleanQuery bq = new BooleanQuery();
bq.Add(new TermQuery(new Term("id", term)), BooleanClause.Occur.SHOULD );
bq.Add(new TermQuery(new Term("location", term)), BooleanClause.Occur.SHOULD );
string txtQuery = bq.ToString();
于 2011-09-20T17:53:54.303 回答