elastic java_elasticsearch java使用

package com.test.elasticsearch;

import java.util.Map;

import org.elasticsearch.action.search.SearchRequestBuilder;

import org.elasticsearch.action.search.SearchResponse;

import org.elasticsearch.common.unit.TimeValue;

import org.elasticsearch.index.query.BoolQueryBuilder;

import org.elasticsearch.index.query.QueryBuilder;

import org.elasticsearch.index.query.QueryBuilders;

import org.elasticsearch.search.SearchHit;

import org.junit.Test;/**

* 复杂查询,使用QueryBuilder进行bool查询

*

* @author xuwenjin*/

public classQueryBuilderTest extends AbstractJunitTest {private static final String INDEX2 = "test_index2";private static final String TYPE2 = "test_type2";public String text = "科技视频";/**

* 单个精确值查找(termQuery)*/@Testpublic voidtermQuery() {

QueryBuilder queryBuilder= QueryBuilders.termQuery("code", "01");

queryBuilder= QueryBuilders.termQuery("isDelete", true);

queryBuilder= QueryBuilders.termQuery("my_title", "我的标题12323abcd");

searchFunction(queryBuilder);

}/**

* 多个值精确查找(termsQuery)

*

* 一个查询相匹配的多个value*/@Testpublic voidtermsQuery() {

QueryBuilder queryBuilder= QueryBuilders.termsQuery("code", "01", "03", "04");

searchFunction(queryBuilder);

}/**

* 查询相匹配的文档在一个范围(rangeQuery)*/@Testpublic voidrangeQuery() {

QueryBuilder queryBuilder=QueryBuilders

.rangeQuery("code") //查询code字段

.from("02")

.to("04")

.includeLower(true) //包括下界

.includeUpper(false);//不包括上界

searchFunction(queryBuilder);

}/**

* 查询相匹配的文档在一个范围(prefixQuery)*/@Testpublic voidprefixQuery() {

QueryBuilder queryBuilder= QueryBuilders.prefixQuery("my_title", "我的");

searchFunction(queryBuilder);

}/**

* 通配符检索(wildcardQuery)

*

* 值使用用通配符,常用于模糊查询

*

* 匹配具有匹配通配符表达式( (not analyzed )的字段的文档。 支持的通配符:

* *,它匹配任何字符序列(包括空字符序列)

* ?,它匹配任何单个字符。

*

* 请注意,此查询可能很慢,因为它需要遍历多个术语。 为了防止非常慢的通配符查询,通配符不能以任何一个通配符*或?开头。*/@Testpublic voidwildcardQuery() {

QueryBuilder queryBuilder= QueryBuilders.wildcardQuery("my_title", "*6789*");

queryBuilder= QueryBuilders.wildcardQuery("my_title", "*345");

queryBuilder= QueryBuilders.wildcardQuery("name", "?闻");

searchFunction(queryBuilder);

}/**

* 正则表达式检索(regexpQuery) 不需要^、$*/@Testpublic voidregexpQuery() {

QueryBuilder queryBuilder= QueryBuilders.regexpQuery("my_title", "我的.+f");

searchFunction(queryBuilder);

}/**

* 使用模糊查询匹配文档查询(fuzzyQuery)*/@Testpublic voidfuzzyQuery() {

QueryBuilder queryBuilder= QueryBuilders.fuzzyQuery("name", "科技");

searchFunction(queryBuilder);

}/**

* 类型检索(typeQuery)

*

* 查询该类型下的所有数据*/@Testpublic voidtypeQuery() {

QueryBuilder queryBuilder=QueryBuilders.typeQuery(TYPE2);

searchFunction(queryBuilder);

}/**

* Ids检索, 返回指定id的全部信息 (idsQuery)

*

* 在idsQuery(type)方法中,也可以指定具体的类型*/@Testpublic voididsQuery() {

QueryBuilder queryBuilder= QueryBuilders.idsQuery().addIds("1", "4", "10");

searchFunction(queryBuilder);

}/************************************************************ 全文检索 ************************************************************/

/**

* 单个匹配 (matchQuery)

*

* 感觉跟termQuery效果一样*/@Testpublic voidmatchQuery() {

QueryBuilder queryBuilder= QueryBuilders.matchQuery("name", "科技");

searchFunction(queryBuilder);

}/**

* 查询匹配所有文件 (matchAllQuery)*/@Testpublic voidmatchAllQuery() {

QueryBuilder queryBuilder=QueryBuilders.matchAllQuery();

searchFunction(queryBuilder);

}/**

* 匹配多个字段, field可以使用通配符(multiMatchQuery)*/@Testpublic voidmultiMatchQuery() {

QueryBuilder queryBuilder= QueryBuilders.multiMatchQuery("132445dfgdfg", "my_title", "name", "you_title");

queryBuilder= QueryBuilders.multiMatchQuery("132445dfgdfg", "*title"); //字段使用通配符

searchFunction(queryBuilder);

}/**

* 字符串检索(queryString)

*

* 一个使用查询解析器解析其内容的查询。

* query_string查询提供了以简明的简写语法执行多匹配查询 multi_match queries ,布尔查询 bool queries ,提升得分 boosting ,模糊

* 匹配 fuzzy matching ,通配符 wildcards ,正则表达式 regexp 和范围查询 range queries 的方式。

*

* 支持参数达10几种*/@Testpublic voidqueryString() {

QueryBuilder queryBuilder= QueryBuilders.queryStringQuery("*技术"); //通配符查询//QueryBuilder queryBuilder = QueryBuilders.queryStringQuery("我的.+f");

searchFunction(queryBuilder);

}/**

* must 相当于and,就是都满足

* should 相当于or,满足一个或多个

* must_not 都不满足*/@Testpublic voidtestQueryBuilder2() {//"科技视频"分词的结果是"科技", "视频", "频"

BoolQueryBuilder queryBuilder =QueryBuilders.boolQuery();//queryBuilder.must(QueryBuilders.wildcardQuery("name", "*科技*"));//queryBuilder.must(QueryBuilders.wildcardQuery("info", "*共*"));//queryBuilder.must(QueryBuilders.wildcardQuery("content", "*美丽*"));

queryBuilder.should(QueryBuilders.wildcardQuery("name", "*科技*"));

queryBuilder.should(QueryBuilders.wildcardQuery("info", "*共*"));

queryBuilder.should(QueryBuilders.wildcardQuery("content", "*美丽*"));

queryBuilder.minimumShouldMatch(2); //最少匹配数//queryBuilder.mustNot(QueryBuilders.wildcardQuery("name", "*科技*"));//queryBuilder.mustNot(QueryBuilders.wildcardQuery("info", "*共*"));//queryBuilder.mustNot(QueryBuilders.wildcardQuery("content", "*美丽*"));

searchFunction(queryBuilder);

}/**

* 查询遍历抽取

*

* 查询结果是根据分值排序(从大到小)

*

* @param queryBuilder*/

private voidsearchFunction(QueryBuilder queryBuilder) {

SearchRequestBuilder requestBuilder=client.prepareSearch().setIndices(INDEX2).setTypes(TYPE2)

.setScroll(new TimeValue(60000)).setQuery(queryBuilder);

SearchResponse response= requestBuilder.setFrom(0).setSize(100).execute().actionGet();

System.out.println("--------------查询结果:----------------------");for(SearchHit hit : response.getHits()) {

System.out.println("分值:" + hit.getScore()); //相关度

Map map =hit.getSource();for(String sKey : map.keySet()) {

System.out.println(sKey + ":" + map.get(sKey));

}

System.out.println("--------------");

}

System.out.println("-----------------------------------");

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值