Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lucene,如何进行多字段搜索?_Lucene - Fatal编程技术网

Lucene,如何进行多字段搜索?

Lucene,如何进行多字段搜索?,lucene,Lucene,用户可以搜索多个条件,每个条件是关系和 我希望“买家”和“备注”搜索结果能够满足搜索条件,转换sql语句如下:其中买家喜欢“%xxxx%”和备注喜欢“%xxxx%” 如果我设置BooleanClause.occurrent.MUST两个字段,将永远找不到结果。但是,如果我将一个字段设置为BooleanClause.occurrent.SHOULD,则可以找到,但不符合搜索条件 我如何才能得到我的Lucene5.0可以像买家一样“%xxxx%”和备注一样“%xxxx%”相同的查询 我的代码: pu

用户可以搜索多个条件,每个条件是关系和

我希望“买家”和“备注”搜索结果能够满足搜索条件,转换sql语句如下:其中买家喜欢“%xxxx%”和备注喜欢“%xxxx%”

如果我设置BooleanClause.occurrent.MUST两个字段,将永远找不到结果。但是,如果我将一个字段设置为BooleanClause.occurrent.SHOULD,则可以找到,但不符合搜索条件

我如何才能得到我的Lucene5.0可以像买家一样“%xxxx%”和备注一样“%xxxx%”相同的查询

我的代码:

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放进去,结果是什么样的?如果您能显示数据的样子,就更容易理解问题