首页 > 解决方案 > 在 Spring Elasticsearch 中使用多个查询搜索多个字段

问题描述

我正在使用 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 () {}

}

我想要两个查询字符串,位置和查询。我希望查询通过字段名称、描述和列表进行搜索,而位置则通过字段地址、位置、城市和州进行搜索。我正在使用此查询进行搜索,但出现异常:

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

标签: springspring-data-elasticsearch

解决方案


推荐阅读