Почему эластичный поиск matchQuery не возвращает результаты? - PullRequest
0 голосов
/ 04 ноября 2019

Я успешно проиндексировал содержимое с помощьюasticsearch, но у меня возникают проблемы при попытке запроса содержимого.

Я хочу выполнить поиск всех документов , которые оба содержат значение " ipsum"(в любом из его терминов) И термин" тип "должен быть равен" cq: Page ".

Я использую Java-клиент High Level Rest. Пробовал с фильтрацией и с Boolquery, но возвращает ноль результатов.

Пример:

SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.from(0);
sourceBuilder.size(10);

SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("gettingstarted");
searchRequest.source(sourceBuilder);

BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
                boolQueryBuilder.must(QueryBuilders.queryStringQuery("ipsum"));
boolQueryBuilder.must(QueryBuilders.matchQuery("type", "cq:Page"));
sourceBuilder.query(boolQueryBuilder);


SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);

Данные выглядят так:

{ 
   "took":4,
   "timed_out":false,
   "_shards":{ 
      "total":1,
      "successful":1,
      "skipped":0,
      "failed":0
   },
   "hits":{ 
      "total":{ 
         "value":1,
         "relation":"eq"
      },
      "max_score":1.0,
      "hits":[ 
         { 
            "_index":"gettingstarted",
            "_type":"_doc",
            "_id":"2",
            "_score":1.0,
            "_source":{ 
               "docs":[ 
                  { 
                     "id":"/content/we-retail/us/en/community/members",
                     "type":"cq:Page",
                     "jcr_title":"Members",
                     "jcr:created":"java.util.GregorianCalendar[time=1564730906165,areFieldsSet=true,areAllFieldsSet=true,lenient=false,zone=sun.util.calendar.ZoneInfo[id=\"GMT+02:00\",offset=7200000,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2019,MONTH=7,WEEK_OF_YEAR=31,WEEK_OF_MONTH=1,DAY_OF_MONTH=2,DAY_OF_YEAR=214,DAY_OF_WEEK=6,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=9,HOUR_OF_DAY=9,MINUTE=28,SECOND=26,MILLISECOND=165,ZONE_OFFSET=7200000,DST_OFFSET=0]",
                     "cq:lastModified":"java.util.GregorianCalendar[time=1518654268630,areFieldsSet=true,areAllFieldsSet=true,lenient=false,zone=sun.util.calendar.ZoneInfo[id=\"GMT-05:00\",offset=-18000000,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2018,MONTH=1,WEEK_OF_YEAR=7,WEEK_OF_MONTH=3,DAY_OF_MONTH=14,DAY_OF_YEAR=45,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=7,HOUR_OF_DAY=19,MINUTE=24,SECOND=28,MILLISECOND=630,ZONE_OFFSET=-18000000,DST_OFFSET=0]",
                     "manualCreationDate":"2019-09-05T13:21:00.000+02:00",
                     "jcr:primaryType":"cq:PageContent",
                     "sling:resourceType":"social/console/components/basepage",
                     "searchDescription":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sportsman delighted improving dashwoods gay instantly happiness six. Ham now amounted absolute not mistaken way pleasant whatever. At an these still no dried folly stood thing. Rapid it on hours hills it seven years. If polite he active county in spirit an. Mrs ham intention promotion engrossed assurance defective. Confined so graceful building opinions whatever trifling in. Insisted out differed ham man endeavor expenses. At on he total their he songs. Related compact effects is on settled do.",
                     "pageImportanceRank":"4"
                  }, ...

Пробовал тоже, но безуспешно, возвращает ноль результатов.

boolQueryBuilder.must(QueryBuilders.matchQuery("type", NT_PAGE));

Ответы [ 2 ]

1 голос
/ 04 ноября 2019

Может быть что-то в этом роде:

GET index/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "multi_match": {
            "query": "ipsum",
            "fields": []
          }
        },
        {
          "match": {
            "type": "cq:Page"
          }
        }
      ]
    }
  }
}

"fields": [] -> meaning all fields
0 голосов
/ 05 ноября 2019

Работало с использованием matchPhraseQuery вместо matchQuery. Мое значение было «cp: Page».

В этом случае matchQuery возвращает документ, только если этот термин имеет точно такое же значение, как и в его индексе (а во время запроса нет анализаторовused ).

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

Анализаторы могут быть указаны для каждого запроса, для каждого поля или для каждого индекса. Во время индекса Elasticsearch будет искать анализатор в следующем порядке:

Анализатор, определенный в отображении поля. Анализатор с именем по умолчанию в настройках индекса. Стандартный анализатор. Во время запроса есть еще несколько слоев:

Анализатор, определенный в полнотекстовом запросе. Search_analyzer определен в отображении поля. Анализатор определен в поле отображения. Анализатор с именем default_search в настройках индекса. Анализатор с именем по умолчанию в настройках индекса. Стандартный анализатор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...