使用Lucene时面临的问题';s关键字分析器

使用Lucene时面临的问题';s关键字分析器,lucene,keyword,query-analyzer,Lucene,Keyword,Query Analyzer,无法正确使用lucene的关键字分析器 String term=“纽约”; //id和位置是我要在其中搜索“术语”的字段 MultiFieldQueryParser queryParser=新的MultiFieldQueryParser( Version.LUCENE_30, {“id”,“location”}, 新关键字分析器()); Query=queryParser.parse(术语); System.out.println(query.toString()); 结果:(身份证:新地点:

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

String term=“纽约”;
//id和位置是我要在其中搜索“术语”的字段
MultiFieldQueryParser queryParser=新的MultiFieldQueryParser(
Version.LUCENE_30,
{“id”,“location”},
新关键字分析器());
Query=queryParser.parse(术语);
System.out.println(query.toString());
结果:(身份证:新地点:纽约)(身份证:纽约地点:纽约)

预期结果:(id:纽约地点:纽约)(id:纽约地点:纽约)


请帮我确定我做错了什么???

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

BooleanQuery bq=new BooleanQuery();
添加(新术语查询(新术语(“id”,术语)),BooleanClause.occure.SHOULD);
添加(新术语查询(新术语(“位置”,术语)),BooleanClause.occure.SHOULD);
字符串txtQuery=bq.ToString();

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

BooleanQuery bq=new BooleanQuery();
添加(新术语查询(新术语(“id”,术语)),BooleanClause.occure.SHOULD);
添加(新术语查询(新术语(“位置”,术语)),BooleanClause.occure.SHOULD);
字符串txtQuery=bq.ToString();

首先,我很好奇它被编译了,因为Eclipse告诉我有一个错误-我必须用
新字符串[]{“id”,“location”}
替换
(否则它被视为两个字符串而不是数组)。您编译了这段代码,还是替换了参数?首先,我很好奇这段代码被编译了,因为Eclipse告诉我有一个错误-我必须用
新字符串[]{“id”,“location”}
替换
而不是数组(否则它被视为两个字符串)。你编译了这段代码,或者替换了参数?只添加了:
@L.B:嘿,L.B谢谢你的回复,非常感谢。只添加了:
@L.B:嘿,L.B谢谢你的回复,非常感谢。