Elv*_*vis 2 lucene keyword query-analyzer
无法正确使用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());
Run Code Online (Sandbox Code Playgroud)
结果:(id:新位置:新)(id:约克 位置:约克)
预期结果:(id:纽约 地点:纽约)(id:纽约 地点:纽约)
请帮助我确定我在这里做错了什么?
你没有做错什么。这就是 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();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2091 次 |
最近记录: |