网络小说网站三巨头,python做互金网站,珠宝网站源码下载,哪里有免费的ppt模板下载Spring Data访问Elasticsearch----查询方法 一、查询lookup策略1.1 声明的查询 二、创建查询三、方法返回类型四、使用Query注解 一、查询lookup策略
Elasticsearch模块支持所有基本的查询构建功能#xff0c;如字符串查询、native搜索查询、基于条件的查询和从方法名派生的查… Spring Data访问Elasticsearch----查询方法 一、查询lookup策略1.1 声明的查询 二、创建查询三、方法返回类型四、使用Query注解 一、查询lookup策略
Elasticsearch模块支持所有基本的查询构建功能如字符串查询、native搜索查询、基于条件的查询和从方法名派生的查询。
1.1 声明的查询
从方法名称派生查询并不总是足够的并且可能导致方法名称不可读。在这种情况下可以使用Query注解请参见四、使用Query注解。
二、创建查询
通常Elasticsearch的查询创建机制如定义查询方法中描述的那样工作。下面是一个简短的示例说明了Elasticsearch查询方法的含义: 例1从方法名创建查询
interface BookRepository extends RepositoryBook, String {ListBook findByNameAndPrice(String name, Integer price);
}上面的方法名将被转换为下面的Elasticsearch json查询
{query: {bool : {must : [{ query_string : { query : ?, fields : [ name ] } },{ query_string : { query : ?, fields : [ price ] } }]}}
}Elasticsearch支持的关键字列表如下所示。 表1方法名称中支持的关键字
关键字例子Elasticsearch查询字符串AndfindByNameAndPrice{ “query” : {“bool” : {“must” : [{ “query_string” : { “query” : “?”, “fields” : [ “name” ] } },{“query_string” : { “query” : “?”, “fields” : [ “price” ] } }]}}}OrfindByNameOrPrice{“query”:{“bool”:{“should”:[{“query_string”:{“query”:“?”,“fields”:[“name”]}},{“query_string”:{“query”:“?”,“fields”:[“price”]}}]}}}IsfindByName{“query”:{“bool”:{“must”:[{“query_string”:{“query”:“?”,“fields”:[“name”]}}]}}}NotfindByNameNot{“query”:{“bool”:{“must_not”:[{“query_string”:{“query”:“?”,“fields”:[“name”]}}]}}}BetweenfindByPriceBetween{“query”:{“bool”:{“must”:[{“range”:{“price”:{“from”:“?”,“to”:“?”,“include_lower”:true,“include_upper”:true}}}]}}}LessThanfindByPriceLessThan{“query”:{“bool”:{“must”:[{“range”:{“price”:{“from”:null,“to”:“?”,“include_lower”:true,“include_upper”:false}}}]}}}LessThanEqualfindByPriceLessThanEqual{“query”:{“bool”:{“must”:[{“range”:{“price”:{“from”:null,“to”:“?”,“include_lower”:true,“include_upper”:true}}}]}}}GreaterThanfindByPriceGreaterThan{“query”:{“bool”:{“must”:[{“range”:{“price”:{“from”:“?”,“to”:null,“include_lower”:false,“include_upper”:true}}}]}}}GreaterThanEqualfindByPriceGreaterThanEqual{“query”:{“bool”:{“must”:[{“range”:{“price”:{“from”:“?”,“to”:null,“include_lower”:true,“include_upper”:true}}}]}}}BeforefindByPriceBefore{“query”:{“bool”:{“must”:[{“range”:{“price”:{“from”:null,“to”:“?”,“include_lower”:true,“include_upper”:true}}}]}}}AfterfindByPriceAfter{“query”:{“bool”:{“must”:[{“range”:{“price”:{“from”:“?”,“to”:null,“include_lower”:true,“include_upper”:true}}}]}}}LikefindByNameLike{“query”:{“bool”:{“must”:[{“query_string”:{“query”:“?*”,“fields”:[“name”]},“analyze_wildcard”:true}]}}}StartingWithfindByNameStartingWith{“query”:{“bool”:{“must”:[{“query_string”:{“query”:“?*”,“fields”:[“name”]},“analyze_wildcard”:true}]}}}EndingWithfindByNameEndingWith{“query”:{“bool”:{“must”:[{“query_string”:{“query”:“*?”,“fields”:[“name”]},“analyze_wildcard”:true}]}}}Contains/ContainingfindByNameContaining{“query”:{“bool”:{“must”:[{“query_string”:{“query”:“?”,“fields”:[“name”]},“analyze_wildcard”:true}]}}}In (when annotated as FieldType.Keyword)findByNameIn(CollectionString names){“query”:{“bool”:{“must”:[{“bool”:{“must”:[{“terms”:{“name”:[“?”,“?”]}}]}}]}}}InfindByNameIn(CollectionString names){ “query”: {“bool”: {“must”: [{“query_string”:{“query”: “”? “?”, “fields”: [“name”]}}]}}}NotIn (when annotated as FieldType.Keyword)findByNameNotIn(CollectionString names){“query”:{“bool”:{“must”:[{“bool”:{“must_not”:[{“terms”:{“name”:[“?”,“?”]}}]}}]}}}NotInfindByNameNotIn(Collectionnames){“query”: {“bool”: {“must”: [{“query_string”: {“query”: “NOT(”? “?”), “fields”: [“name”]}}]}}}TruefindByAvailableTrue{“query”:{“bool”:{“must”:[{“query_string”:{“query”:“true”,“fields”:[“available”]}}]}}}FalsefindByAvailableFalse{“query”:{“bool”:{“must”:[{“query_string”:{“query”:“false”,“fields”:[“available”]}}]}}}OrderByfindByAvailableTrueOrderByNameDesc{“query”:{“bool”:{“must”:[{“query_string”:{“query”:“true”,“fields”:[“available”]}}]}},“sort”:[{“name”:{“order”:“desc”}}]}ExistsfindByNameExists{“query”:{“bool”:{“must”:[{“exists”:{“field”:“name”}}]}}}IsNullfindByNameIsNull{“query”:{“bool”:{“must_not”:[{“exists”:{“field”:“name”}}]}}}IsNotNullfindByNameIsNotNull{“query”:{“bool”:{“must”:[{“exists”:{“field”:“name”}}]}}}IsEmptyfindByNameIsEmpty{“query”:{“bool”:{“must”:[{“bool”:{“must”:[{“exists”:{“field”:“name”}}],“must_not”:[{“wildcard”:{“name”:{“wildcard”:“*”}}}]}}]}}}IsNotEmptyfindByNameIsNotEmpty{“query”:{“bool”:{“must”:[{“wildcard”:{“name”:{“wildcard”:“*”}}}]}}}
不支持使用GeoJson参数构建Geo-shape查询的方法名。如果您需要在存储库中拥有这样的函数请在自定义存储库实现中使用ElasticsearchOperations和CriteriaQuery。
三、方法返回类型
存储库方法可以定义为具有以下返回类型以返回多个元素:
ListTStreamTSearchHitsTListSearchHitTStreamSearchHitTSearchPageT
四、使用Query注解
例2使用Query注解在方法上声明query 传递给该方法的参数可以插入到查询字符串中的占位符中。第一个、第二个、第三个参数的占位符形式为?0、?1、?2等。
interface BookRepository extends ElasticsearchRepositoryBook, String {Query({\match\: {\name\: {\query\: \?0\}}})PageBook findByName(String name,Pageable pageable);
}设置为注解参数的String必须是一个有效的Elasticsearch JSON查询。它将作为查询元素的值发送给Elasticsearch;例如如果使用参数John调用函数它将产生以下查询体:
{query: {match: {name: {query: John}}}
}例3使用Collection参数的方法上的Query注解
Query({\ids\: {\values\: ?0 }})
ListSampleEntity getByIds(CollectionString ids);像上面这样的存储库方法将进行ID查询以返回所有匹配的文档。因此调用List为[“id1”、“id2”、“id3”]的方法将生成查询体
{query: {ids: {values: [id1, id2, id3]}}
}