每个搜索 cassandra lucene 索引的多个过滤器

Pro*_*000 3 java cassandra stratio cassandra-lucene-index

有没有办法使用多个过滤器(使用构建器)进行 cassandra lucene 索引搜索?

这是我正在做的一个例子:

    // Age Filter
conditionsToFilter.add(range("age")
    .lower(indexFormatDate(preferences.getAgeMax()))
    .upper(indexFormatDate(preferences.getAgeMin()))
    .includeLower(true)
    .includeUpper(true)
    .docValues(DOC_VALUES));

// Height Filter
conditionsToFilter.add(range("height")
    .lower(preferences.getHeightMin())
    .upper(preferences.getHeightMax())
    .includeLower(true)
    .includeUpper(true)
    .docValues(DOC_VALUES));

// Distance Filter
conditionsToFilter.add(geoDistance("location",
    preferences.getCurrentUserLocation().getLongitude(),
    preferences.getCurrentUserLocation().getLatitude(),
    String.format("%dmi", preferences.getDistanceMax())));


// Apply Filters
Search searchObj = com.stratio.cassandra.lucene.builder.Builder.search();
for (Condition condition : conditionsToFilter) {
  searchObj.filter(condition); <-- this definitely won't work
}

// Create Search String
String query = searchObj
    .refresh(false)
    .build();
Run Code Online (Sandbox Code Playgroud)

做这样的事情的规定方法是什么?谢谢!

小智 5

您应该使用BooleanQuery

替换这个:

// Apply Filters
Search searchObj = com.stratio.cassandra.lucene.builder.Builder.search();
for (Condition condition : conditionsToFilter) {
    searchObj.filter(condition); <-- this definitely won't work
}
Run Code Online (Sandbox Code Playgroud)

和:

Search searchObj = com.stratio.cassandra.lucene.builder.Builder.search();
searchObj.filter(bool().must(conditionsToFilter))
Run Code Online (Sandbox Code Playgroud)

BooleanQuery能够执行简单的布尔表达式,包括与 must()、OR 与 should() 或 NOT 与 not()。

该功能增加了嵌套的能力,您可以构建几乎所有可能的布尔表达式。IE:

((A && B && C) || (D && !E))
Run Code Online (Sandbox Code Playgroud)

翻译成:

bool().should(bool().must(A,B,C),bool().must(D,bool().not(E)))
Run Code Online (Sandbox Code Playgroud)