spring-data-elasticsearch,Spring,spring Data Elasticsearch" /> spring-data-elasticsearch,Spring,spring Data Elasticsearch" />

在Spring Elasticsearch中使用多个查询搜索多个字段

在Spring Elasticsearch中使用多个查询搜索多个字段,spring,spring-data-elasticsearch,Spring,spring Data Elasticsearch,我正在使用Spring Elasticsearch。这是我的java类: @Entity @Document(indexName = "shopindex") public class Shop implements Serializable { private @Id @GeneratedValue(strategy = GenerationType.IDENTITY) Long id; private String imagePath; @Fiel

我正在使用Spring Elasticsearch。这是我的java类:

@Entity
@Document(indexName = "shopindex")
public class Shop implements Serializable {


  private @Id @GeneratedValue(strategy = GenerationType.IDENTITY) Long id;  

  private String imagePath;

  @Field(type = FieldType.Text, name = "name")
  private String name;

  @Field(type = FieldType.Text, name = "description")
  private String description;

  @Field(type = FieldType.Text, name = "address")
  private String address;

  @Field(type = FieldType.Text, name = "locality")
  private String locality;

  @Field(type = FieldType.Keyword, name = "city")
  private String city;

  @Field(type = FieldType.Keyword, name = "state")
  private String state;

  private String timing;

  @Field(type = FieldType.Nested, includeInParent = true)
  private ArrayList<Listing> listings;

  Shop () {}

}
@实体
@文档(indexName=“shopindex”)
公共类商店实现了可序列化{
private@Id@GeneratedValue(strategy=GenerationType.IDENTITY)长Id;
私有字符串路径;
@字段(type=FieldType.Text,name=“name”)
私有字符串名称;
@字段(type=FieldType.Text,name=“description”)
私有字符串描述;
@字段(type=FieldType.Text,name=“address”)
私有字符串地址;
@字段(type=FieldType.Text,name=“locality”)
私有字符串局部性;
@字段(type=FieldType.Keyword,name=“city”)
私人城市;
@字段(type=FieldType.Keyword,name=“state”)
私有字符串状态;
私有字符串定时;
@字段(type=FieldType.Nested,includeInParent=true)
私有ArrayList列表;
商店(){}
}
我想要两个查询字符串,位置和查询。我希望查询通过字段名称、描述、列表和位置进行搜索,通过字段地址、位置、城市和州进行搜索。我正在使用此查询进行搜索,但遇到异常:

 NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
          .withQuery(boolQuery.must(QueryBuilders.multiMatchQuery(location, "address", "locality", "city", "state"))
          .must(boolQuery.should(QueryBuilders.multiMatchQuery(query, "name", "description"))
          
          .should(QueryBuilders
                  .nestedQuery("listings", 
                          QueryBuilders.multiMatchQuery(query, "listings.name", "listings.description"),ScoreMode.Avg))))
          .build();
 Iterable<Shop> itr = searchRepository.search(searchQuery);
NativeSearchQuery searchQuery=new NativeSearchQueryBuilder()
.withQuery(boolQuery.must(QueryBuilders.multiMatchQuery(位置,“地址”,“位置”,“城市”,“州”))
.must(boolQuery.should(QueryBuilders.multiMatchQuery(查询,“名称”、“说明”))
.should(查询生成器)
.nestedQuery(“列表”,
multiMatchQuery(查询,“listings.name”、“listings.description”)、ScoreMode.Avg)
.build();
Iterable itr=searchRepository.search(searchQuery);

这应该如何组合?逻辑与?还是?您试图搜索哪些数据?逻辑和。更新了问题以添加到目前为止我尝试过的内容。对
withQuery()
的第二次调用将替换您在第一次调用中设置的查询。您需要将它们包装在boolQuery中,以组合它们。或者使用Spring Data Elasticsearch提供的
CriteriaQuery