Lucene,如何进行多字段搜索?
用户可以搜索多个条件,每个条件是关系和 我希望“买家”和“备注”搜索结果能够满足搜索条件,转换sql语句如下:其中买家喜欢“%xxxx%”和备注喜欢“%xxxx%” 如果我设置BooleanClause.occurrent.MUST两个字段,将永远找不到结果。但是,如果我将一个字段设置为BooleanClause.occurrent.SHOULD,则可以找到,但不符合搜索条件 我如何才能得到我的Lucene5.0可以像买家一样“%xxxx%”和备注一样“%xxxx%”相同的查询 我的代码:Lucene,如何进行多字段搜索?,lucene,Lucene,用户可以搜索多个条件,每个条件是关系和 我希望“买家”和“备注”搜索结果能够满足搜索条件,转换sql语句如下:其中买家喜欢“%xxxx%”和备注喜欢“%xxxx%” 如果我设置BooleanClause.occurrent.MUST两个字段,将永远找不到结果。但是,如果我将一个字段设置为BooleanClause.occurrent.SHOULD,则可以找到,但不符合搜索条件 我如何才能得到我的Lucene5.0可以像买家一样“%xxxx%”和备注一样“%xxxx%”相同的查询 我的代码: pu
public List<T> query(int page, int size, String description, Date startDate, Date endDate, String buyers) {
IndexReader reader = DirectoryReader.open(FSDirectory.open(Paths.get(indexPath)));
IndexSearcher searcher = new IndexSearcher(reader);
Analyzer analyzer = new StandardAnalyzer();
BooleanQuery query = buildQuery(description, buyers, analyzer);
Query arrivalDateQuery = NumericRangeQuery.newLongRange("arrivalDate", startDate.getTime(), endDate.getTime(), true, true);
query.add(arrivalDateQuery, BooleanClause.Occur.MUST);
// outout:+remark:tape +buyers:company +arrivalDate:[1356969600000 TO 1425916800000]
logger.debug("queryString: " + query.toString());
}
private BooleanQuery buildQuery(String description, String buyers, Analyzer analyzer) {
BooleanQuery query = new BooleanQuery();
QueryBuilder builder = new QueryBuilder(analyzer);
if (description.length() > 0) {
Query descriptionQuery = builder.createBooleanQuery("remark", description);
query.add(descriptionQuery, BooleanClause.Occur.MUST); // error, not found
}
if (buyers.length() > 0) {
Query buyersQuery = builder.createBooleanQuery("buyers", buyers);
query.add(buyersQuery, BooleanClause.Occur.MUST); // error, not found
}
return query;
}
在我看来它应该有用 您的字段类型是什么?如果它们不是TextField,它们将不会被标记化,这可能就是问题所在 如果你把execute.SHULD放进去,结果是什么样的?如果您能显示数据的样子,就更容易理解问题