为什么Elasticsearch matchQuery不返回结果?

我已经用Elasticsearch成功索引了内容,但是尝试查询内容时遇到了麻烦。

我要搜索的是所有文档,它们都包含值“ ipsum ”(无论用什么术语) AND “类型”应等于“ cq:Page”。

我正在使用高级Rest Java客户端。尝试过过滤和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,zone=sun.util.calendar.ZoneInfo[id=\"GMT-05:00\",offset=-18000000,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,"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));
hscooler 回答:为什么Elasticsearch matchQuery不返回结果?

也许是这样的:

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

"fields": [] -> meaning all fields
,

它使用了 matchPhraseQuery 而不是matchQuery。 我的值是“ cp:Page”。

在这种情况下,仅当该词与它的索引中的值完全相同时,matchQuery才返回文档(并且在查询时没有使用分析器)。

另一方面, matchPhraseQuery还将在查询时使用默认分析器,因此在分析器更改后,查询中的值将与索引值相同。

  

可以按查询,按字段或按索引指定分析器。在索引时间,Elasticsearch将按以下顺序查找分析器:

     

在字段映射中定义的分析器。分析器名为default   在索引设置中。标准分析仪。在查询时,有   还有几层:

     

在全文查询中定义的分析器。 search_analyzer定义   在现场映射。分析器在字段映射中定义。一个   索引设置中名为default_search的分析器。分析器名为   索引设置中的默认值。标准分析仪。

本文链接:https://www.f2er.com/3166474.html

大家都在问