elasticsearch 如何在elasticSearch中清除(取消选中筛选器)filterred查询,elasticsearch,filter,elasticsearch,Filter" /> elasticsearch 如何在elasticSearch中清除(取消选中筛选器)filterred查询,elasticsearch,filter,elasticsearch,Filter" />

elasticsearch 如何在elasticSearch中清除(取消选中筛选器)filterred查询

elasticsearch 如何在elasticSearch中清除(取消选中筛选器)filterred查询,elasticsearch,filter,elasticsearch,Filter,我已经创建了一些如上所述的过滤器。假设如果我不想过滤位置(即,包括来自所有位置的结果),是否可以在不重写查询的情况下使用任何通配符实现 最好的方法是使用AndFIlterBuilder并使用add()方法来创建动态查询 GET /Spotafood/Restaurants/_search { "query": { "match": { "name": "Pizza" } } , "filter": { "and": { "filters": [

我已经创建了一些如上所述的过滤器。假设如果我不想过滤位置(即,包括来自所有位置的结果),是否可以在不重写查询的情况下使用任何通配符实现

最好的方法是使用AndFIlterBuilder并使用add()方法来创建动态查询

GET /Spotafood/Restaurants/_search
{
"query": {
    "match": {
       "name": "Pizza"
    }
}
, "filter": {
    "and": {
       "filters": [
          {
              "term": {
                 "Location": "New Jersey"
              }
          } ,
          {
              "term": {
                 "Cusines": "Pizza"
            }
          }  ,{
              "numeric_range": {
                 "rating": {
                    "from": 1,
                    "to": 5
                 }
              }
          }
       ]
    }
}
}
publicstaticsearchsourcebuilder搜索(SearchParams-params){
Map Map=newhashmap();
map=params.getParametermapping();
SearchSourceBuilder searchsourcequerybuilder=新的SearchSourceBuilder();
AndFilterBuilder finalfilter=FilterBuilders.andFilter();
TermsFacetBuilder locationfacet=null;
对于(Map.Entry:Map.entrySet()){
if(entry.getKey().equalsIgnoreCase(“querystring”)){
if(entry.getValue().length()==0){
searchSourceBuilder=searchSourceBuilder.query(
QueryBuilders.matchAllQuery()).sort(
SortBuilders.fieldSort(“评级”).order(SortOrder.DESC));
}否则{
searchsourcequerybuilder=searchsourcequerybuilder
.query(QueryBuilders.fuzzyLikeThisQuery(“名称”)
.likeText(entry.getValue());
}
}
if(entry.getKey().equalsIgnoreCase(“locationName”)){
if(entry.getValue().length()==0){
System.out.println(“位置过滤器为空”);
locationfacet=FaceBuilders.termsFacet(“locationName”)
.字段(“位置名称”)。大小(20);
}否则{
locationfacet=FacetBuilders
.termsFacet(“位置名称”)
.面过滤器(
FilterBuilders.termFilter(“locationName”,
entry.getValue())
.字段(“位置名称”)。大小(20);
finalfilter=finalfilter.add(FilterBuilders.termFilter(
“locationName”,entry.getValue());
}
}
if(entry.getKey().equalsIgnoreCase(“dinein”)){
if(entry.getValue().length()==0){
System.out.println(“禁用进餐过滤器”);
}否则{
finalfilter=finalfilter.add(FilterBuilders.termFilter(
“dinein”,entry.getValue());
}
}
if(entry.getKey().equalsIgnoreCase(“评级”)){
if(entry.getValue().length()==0){
System.out.println(“禁用分级过滤器”);
}否则{
finalfilter=finalfilter.add(FilterBuilders
.numericRangeFilter(“评级”)
.from(entry.getValue())到(“5”);
}
}
if(entry.getKey().equalsIgnoreCase(“barAvailable”)){
if(entry.getValue().length()==0){
System.out.println(“禁用可用过滤器”);
}否则{
finalfilter=finalfilter.add(FilterBuilders.termFilter(
“barAvailable”,entry.getValue());
}
}
}
searchsourcequerybuilder=searchsourcequerybuilder.filter(finalfilter)
.面(位置面);
System.out.println(searchsourcequerybuilder.toString());
返回searchsourcequerybuilder;
}
}

您尝试过通配符吗?发生什么事了?我试过“*”和“。但没用。有什么建议吗?您可以使用match all筛选器(“筛选器”:{“match_all”:{}),但我猜您希望保持结构不变,并保留在“term”:{“location”中…部分?是的,我想保留这种结构,因为如果我有多个过滤器,有时会出现类似于启用其他过滤器的情况。因此,我猜,匹配所有过滤器都不会有帮助。您是否无法更改查询,只需根据需要添加/删除过滤器?
SearchSourceBuilder
在ES 1.1.1中没有功能
filter
。它打开了ly允许您添加后期过滤器。
public static SearchSourceBuilder search(SearchParams params) {



Map<String, String> map = new HashMap<String, String>();
map = params.getParametermapping();

SearchSourceBuilder searchsourcequerybuilder = new SearchSourceBuilder();


AndFilterBuilder finalfilter = FilterBuilders.andFilter();
TermsFacetBuilder locationfacet = null;

for (Map.Entry<String, String> entry : map.entrySet()) {
     if (entry.getKey().equalsIgnoreCase("querystring")) {
    if (entry.getValue().length() == 0) {
        searchSourceBuilder = searchSourceBuilder.query(
            QueryBuilders.matchAllQuery()).sort(
                SortBuilders.fieldSort("rating").order(SortOrder.DESC));

    } else {

        searchsourcequerybuilder = searchsourcequerybuilder
            .query(QueryBuilders.fuzzyLikeThisQuery("name")
                .likeText(entry.getValue()));
    }
    }
    if (entry.getKey().equalsIgnoreCase("locationName")) {
    if (entry.getValue().length() == 0) {
        System.out.println("location Filter is nulll");
        locationfacet = FacetBuilders.termsFacet("locationName")
            .field("locationName").size(20);

    } else {
        locationfacet = FacetBuilders
            .termsFacet("locationName")
            .facetFilter(
                FilterBuilders.termFilter("locationName",
                    entry.getValue()))
                    .field("locationName").size(20);
        finalfilter = finalfilter.add(FilterBuilders.termFilter(
            "locationName", entry.getValue()));
    }
    }
    if (entry.getKey().equalsIgnoreCase("dinein")) {
    if (entry.getValue().length() == 0) {
        System.out.println("Dine in Filter Disabled");
    } else {
        finalfilter = finalfilter.add(FilterBuilders.termFilter(
            "dinein", entry.getValue()));
    }
    }
    if (entry.getKey().equalsIgnoreCase("rating")) {
    if (entry.getValue().length() == 0) {

        System.out.println("Rating Filter Disabled");
    } else {
        finalfilter = finalfilter.add(FilterBuilders
            .numericRangeFilter("rating")
            .from(entry.getValue()).to("5"));

    }
    }
    if (entry.getKey().equalsIgnoreCase("barAvailable")) {
    if (entry.getValue().length() == 0) {
        System.out.println("barAvailable Filter Disabled");

    } else {
        finalfilter = finalfilter.add(FilterBuilders.termFilter(
            "barAvailable", entry.getValue()));

    }
    }
}

searchsourcequerybuilder = searchsourcequerybuilder.filter(finalfilter)
    .facet(locationfacet);
System.out.println(searchsourcequerybuilder.toString());
return searchsourcequerybuilder;
}

}