搜索
ElasticsearchTemplate
- 使用ElasticsearchTemplate,但是是自己定义的bean,
ElasticsearchConfiguration 。 - maven依赖使用的jar,需要与部署的elasticsearch版本一致
- 主要使用
SearchRequestBuilder 构建请求,提交 - setFetchSource,是否获取信息内容,false不获取,查询数量时可以使用。true,获取全部字段。也可以指定获取哪些字段,或者过滤掉哪些字段
- setSize 获取的数量,不建议超过500
- highlighter,设置高亮字段
- addSort,增加排序,可以增加多个,评分排序为
SortBuilders.scoreSort() ,没有其他排序时,默认相关度评分倒序 - searchAfter,在某个查询评分条件后,查询结果,用于深分页查询
- setSearchType,可以指定搜索方式,如
DFS_QUERY_THEN_FETCH - setPreference,可以指定优先搜索主分片
- 使用
SearchResponse 接收请求结果,获取结果可以使用searchResponse.getHits().getTotalHits()
搜索方法
查询全部 matchAllQuery
MatchAllQueryBuilder matchAllQuery() ,通过QueryBuilders.matchAllQuery() 创建- 不设置查询条件,查询全部时使用
- 类似数据库查询时的
1=1
布尔查询 boolQuery
- BoolQueryBuilder创建,
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); - 可以包装其他查询,作为一个整体
- 可以看做,起到一个括号的作用,把几个请求包在一起
精确匹配 termQuery
- termQuery,
TermQueryBuilder termQuery(String name, Object value) ,使用QueryBuilders.termQuery 创建,完全匹配 - termsQuery,
TermsQueryBuilder termsQuery(String name, Object... values) ,匹配多个值,value也可以是其他类型或者集合,但要类型一致,和查询key的类型匹配,通过QueryBuilders.termsQuery 创建,完全匹配 - value不会被分词,直接匹配,完全命中,则会返回
短语匹配 matchPhraseQuery
- matchPhraseQuery,
MatchPhraseQueryBuilder matchPhraseQuery(String name, Object text) ,使用QueryBuilders.matchPhraseQuery 创建,短语匹配 - matchPhrasePrefixQuery,
MatchPhrasePrefixQueryBuilder matchPhrasePrefixQuery(String name, Object text) ,使用QueryBuilders.matchPhrasePrefixQuery 创建,前缀匹配 - 类似于数据库的
like 查询,但也不一样,value会被分词
无评分查询 constantScoreQuery
- 作为查询条件,但不参与评分
- 例如根据关键词查询时,关键词的匹配相关度才是我们需要的,而站点id、栏目类型等,虽然作为查询条件,但并不需要它参与评分
ConstantScoreQueryBuilder constantScoreQuery(QueryBuilder queryBuilder) ,可以把其他不需要参与评分的请求条件,包在里面
普通查询 matchQuery
- 单字段查询,matchQuery,``
- 多字段查询 multiMatchQuery,一个查询条件value,需要匹配多个字段时使用。
MultiMatchQueryBuilder multiMatchQuery(Object text, String... fieldNames) ,fieldNames为字段列表,text会被分词 - 可以指定
type ,BEST_FIELDS 模糊查询,PHRASE 短语匹配,PHRASE_PREFIX 前缀匹配
是否有值 existsQuery
ExistsQueryBuilder existsQuery(String name) ,通过QueryBuilders.existsQuery 创建- 类似于数据库的
is not null
范围查询 range
new RangeQueryBuilder(field).from(from).includeLower(includeLower).to(to).includeUpper(includeUpper) ,可用于范围查询,例如日期、数值等- 可包含边界值,也可以不包含
索引Bboss
- 暂时只使用了bboss的http封装,借助它使用9200提交
- 其实自己找一个http工具类也可以,只不过bboss封装了很多方法
索引库
- index是否存在 existIndice
- type是否存在 existIndiceType
- 获取别名 _aliases
- 删除别名 removeAlias
- 添加别名 addAlias
- 创建索引库 createIndiceMapping
- 新建/修改type的mapping updateIndiceMapping
- 删除索引库 dropIndice
增删改查
- 新增/更新单个文档 addDocumentWithId addDocument
- 删除文档 deleteDocument
- 获取单个文档 getDocument
- 根据查询删除 _delete_by_query
bulk
分词
|