elasticsearch,Java,elasticsearch" /> elasticsearch,Java,elasticsearch" />

Java 为什么elasticsearch matchQuery不返回结果?

Java 为什么elasticsearch matchQuery不返回结果?,java,elasticsearch,Java,elasticsearch,我已经使用elasticsearch成功地为内容编制了索引,但在尝试查询内容时遇到了问题 我想做的是搜索所有同时包含值“ipsum”(用任何术语)和术语“type”应等于“cq:Page”的文档 我正在使用高级RESTJava客户端。尝试使用筛选和Boolquery,但它返回零结果 boolQueryBuilder.must(QueryBuilders.matchQuery("type", NT_PAGE)); 例如: SearchSourceBuilder sourceBuilder = n

我已经使用elasticsearch成功地为内容编制了索引,但在尝试查询内容时遇到了问题

我想做的是搜索所有同时包含值“ipsum”(用任何术语)和术语“type”应等于“cq:Page”的文档

我正在使用高级RESTJava客户端。尝试使用筛选和Boolquery,但它返回零结果

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

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));

也许是这样的:

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也将在查询时使用默认的分析器,因此在analyzers更改后,查询中的值将与索引值相同

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

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

在全文查询中定义的分析器。搜索分析器已定义 实地测绘。在字段映射中定义的分析器。一 名为default_的分析器在索引设置中搜索。一个名为 索引设置中的默认值。标准分析仪


请分享你的地图中间有很多条件,但我添加了一些简化的条件。这里与我的查询有什么区别?我尝试使用Java,但没有成功。我使用的是多匹配查询字符串。尝试QueryBuilders.multiMatchQuery(您的文本)是的,但即使是这个boolQueryBuilder.must(QueryBuilders.matchQuery(“type”,NT_PAGE));返回零结果。其中NT_页表示“cq:PAGE”。我也尝试了cq\\:Page,但结果是相同的,如果您通过kibana运行我的查询,您会得到任何结果吗?