Эластичный поиск | Фильтровать запрос

Я использую elasticsearch-1.7.1, и зависимость от Java

<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>1.7.1</version>

Проблема: я использую предложение в ES, но когда я запрашиваю ES с отфильтрованным запросом, он дает мне нулевой ответ.

contentQuery = boolQuery().must(QueryBuilders.matchQuery(PROPERTY_BOOK_ID, bookId).operator(Operator.AND))
             .must(QueryBuilders.matchQuery("contentType", "enrichments").operator(Operator.AND))
             .must(contentQuery);   

FilteredQueryBuilder builder = 
             QueryBuilders.filteredQuery(contentQuery, FilterBuilders.termFilter("spineId","chapter04.html"));

searchResponse = searchClientService.getClient()
                .prepareSearch(INDEX_NAME).setTypes(INDEX_TYPE)
                .setQuery(builder)
                .execute().actionGet();

без фильтра работает нормально. Может ли кто-нибудь предложить, как применить фильтр к запросу или дайте мне знать, если я ошибаюсь при выполнении запросов.

Детали запроса:

{
  "filtered" : {
    "query" : {
      "bool" : {
        "must" : [ {
          "match" : {
            "bookId" : {
              "query" : "d563739c-8b46-449b-b695-d662cb32087d",
              "type" : "boolean",
              "operator" : "AND"
            }
          }
        }, {
          "match" : {
            "contentType" : {
              "query" : "enrichments",
              "type" : "boolean",
              "operator" : "AND"
            }
          }
        }, {
          "bool" : {
            "must" : {
              "match" : {
                "content" : {
                  "query" : "resources*",
                  "type" : "phrase_prefix"
                }
              }
            }
          }
        } ]
      }
    },
    "filter" : {
      "term" : {
        "spineId" : "chapter04.html"
      }
    }
  }
}

Я также пробовал другие запросы фильтра в моем индексе, ни один из них не работает. Ниже запрос должен возвращать некоторый результат, но он возвращает пустой результат.

{
  "filtered" : {
    "query" : {
      "match_all" : { }
    },
    "filter" : {
      "bool" : {
        "must" : {
          "term" : {
            "spineId" : "chapter03.html"
          }
        }
      }
    }
  }
}

Отображение:

 private XContentBuilder buildMapping() throws Exception {
        return jsonBuilder().prettyPrint()
                .startObject()
                    .startObject(indexType)
                        .startObject("properties")
                            .startObject(PROPERTY_SPINE_ID).field("type", "string").field("index", "not_analyzed").endObject()
                        .endObject()
                    .endObject()
                .endObject();
    }
XContentBuilder source = jsonBuilder().startObject();
        source.field(PROPERTY_BOOK_ID, bookId)
        .field(PROPERTY_WIDGET_ID, widgetId)
        .field(PROPERTY_CONTENT, widgetDescription)
        .field(PROPERTY_CONTENT_TYPE, contentType.getValue())
        .field(PROPERTY_META_DATA, widgetJsonString)
        .field(PROPERTY_SPINE_ID, spineId)
        .endObject();

любая помощь очень ценится.


person Himanshu Arora    schedule 29.06.2016    source источник
comment
Разве это не должно быть setQuery(builder)?   -  person Val    schedule 29.06.2016
comment
извините за неправильный ввод.. код обновлен, пожалуйста, проверьте   -  person Himanshu Arora    schedule 29.06.2016
comment
Скорее всего, дело не в коде: term запросы/фильтры точно совпадают. Как отображается spineId?   -  person pickypg    schedule 29.06.2016
comment
отображение обновлено, я уверен, что в моем отображении есть какая-то проблема.   -  person Himanshu Arora    schedule 30.06.2016
comment
установка поля (SPINE_ID) для индекса: not_analyzed в моем отображении (buildMapping()) решила проблему, для запроса фильтра я следовал stackoverflow.com/questions/28001632/. ‹‹Код обновлен››   -  person Himanshu Arora    schedule 30.06.2016