формат строки запросаasticsearch - PullRequest
1 голос
/ 18 января 2012

Я использую

SearchBuilder.searchSource.query(query_string).buildAsBytes() 

для выполнения строки запроса на серверахasticsearch.

Проблема в том, что я не знаю, каков правильный формат строки запроса.Например, я хочу найти все документы с полем country равным US, я могу использовать остальные API

http://my.elastic.search.server/foo/dummy/_search?q=country:US

, чтобы получить то, что мне нужно.Но с точки зрения java api я пробовал country:US, q=country:US и {\"country\":\"US\"}, но каждый раз возвращался SearchPhaseExecutionException.

Документация ElasticSearch не проливает свет на то, что может быть формат строки запроса в этом случае, и я исчерпал результаты Google, связанные с этой темой.Может ли кто-нибудь помочь мне в этом?Спасибо!

Ответы [ 5 ]

4 голосов
/ 18 января 2012

На основании вашего запроса REST эквивалент в соответствии с API поиска * будет:

SearchResponse response = client.prepareSearch("foo")
    .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
    .setQuery(termQuery("country", "US"))
    .execute()
    .actionGet();

Вы также можете использовать чистую строку запроса, как в примере REST:

    .setQuery(queryString("country:US"))

Лучшим справочным материалом является Javadoc, доступный в репозитории Maven .

2 голосов
/ 22 января 2012

Недавно я написал обзор на эту тему:

http://karussell.wordpress.com/2012/01/19/birds-eye-view-on-elasticsearch-its-query-dsl/

2 голосов
/ 18 января 2012

OK. Похоже, мне нужно передать в более надуманной строке JSON

{ "Строка запроса" : { "default_field": "anotherFoo", "запрос": "это И это ИЛИ там" } }

Это полезно, потому что я могу передать чистый запрос в стиле Lucene против упругого поиска.

1 голос
/ 04 марта 2016

Я чувствую, что это должно работать.

QueryBuilder qb = QueryBuilders.queryStringQuery("pattern").field("field to search");
SearchRequestBuilder sreq = client.prepareSearch("INDEX").setTypes("TYPE").setQuery(qb);
SearchResponse response = sreq
                .setFrom("From page")
                .setSize("size")
                .execute().actionGet();
1 голос
/ 14 июня 2015

Это старый вопрос, но, поскольку я немного боролся с подобным запросом, я подумал, что добавлю свои два цента.Прежде всего я не смог найти

SearchBuilder.searchSource.query(query_string).buildAsBytes() 

Как уже упоминалось в исходном вопросе в ES java API.

Мое тело запроса выглядело как

{
  "query": {
    "query_string": {
      "default_field": "file",
      "query": "Java"
    }
  },
  "highlight": {
    "fields": {
      "file": {

      }
    }
  }
}

Iобнаружил, что это можно сделать следующими двумя способами:

    String queryString = "{" 
            + "\"query_string\": " 
                + "{"
                    + "\"default_field\":"
                + " \"file\","
                        + " \"query\": \"Email OR @gmail.com @yahoo.com\""
                        + "}"
                        + "}";

Первый подход

SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();        
    searchSourceBuilder.query(queryString); //or searchSourceBuilder.query(queryString).buildAsBytes();

    SearchRequestBuilder searchRequestBuilder = new SearchRequestBuilder( ESConnectionFactory.INSTANCE.getClient()) ;
    searchRequestBuilder.internalBuilder(searchSourceBuilder).setIndices("resume")
    .setTypes("docs").addHighlightedField("file");

Второй подход

SearchRequestBuilder searchRequestBuilder = client.prepareSearch()
                .setIndices("resume")
                .setTypes("docs").setQuery(queryString).addHighlightedField("file");

А потом стандартные

SearchResponse response = searchRequestBuilder.execute().actionGet();

Ключи к сведению

  1. Не добавляйте «запрос» вqueryString
  2. Не добавлять выделенные поля в строку запроса.Используйте addHighlightedField
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...