我有一个与shingleAnalyzer相关的问题,我想创建搜索词的带状疱疹,同时将它们提供给lucene进行搜索
String term = "new york";
String[] fields = {"city", "city_desc"};
ShingleAnalyzerWrapper shingleWrapper = new ShingleAnalyzerWrapper(new StandardAnalyzerNew(Version.LUCENE_30, new File(GlobalData.GENERAL_STOPWORD_FILE)) , 5);
MultiFieldQueryParser queryParser = new MultiFieldQueryParser(Version.LUCENE_30,
fields,
shingleWrapper
);
Query query = queryParser.parse(term);
System.out.println("query : " + query.toString());
output: (city : new city_desc: new), (city : york city_desc : york)
这里的术语带状疱疹无法生成,我想输出这样的东西:
output : (city : new city_desc: new), (city : york city_desc : york), (city: new york, city_desc : new york)
有什么想法吗?我怎么能这样做?
答案 0 :(得分:1)
您可以使用覆盖函数getFieldQuery(String,String,boolean)创建从MultiFieldQueryParser派生的查询解析器,其中术语将在带状疱疹中合并,并且将创建来自这些带状疱疹的查询。如果它仍然是实际的我可以得到一个示例代码来执行此操作