package org.nlpcn.es4sql;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.junit.Test;
import org.nlpcn.es4sql.exception.SqlParseException;
import org.nlpcn.es4sql.query.SqlElasticSearchRequestBuilder;
import java.io.IOException;
import java.sql.SQLFeatureNotSupportedException;
/**
* 定製方法查詢.
* @author ansj
*
*/
public class MethodQueryTest {
/**
* query 搜索就是 , lucene 原生的搜素方式 注意这个例子中value可以随便命名 "query" :
* {query_string" : {"query" : "address:880 Holmes Lane"}
*
* @throws IOException
* @throws SqlParseException
*/
@Test
public void queryTest() throws IOException, SqlParseException, SQLFeatureNotSupportedException {
SqlElasticSearchRequestBuilder select = (SqlElasticSearchRequestBuilder) MainTestSuite.getSearchDao().explain("select address from bank where q= query('address:880 Holmes Lane') limit 3").explain();
System.out.println(select);
}
/**
* matchQuery 是利用分词结果进行单个字段的搜索. "query" : { "match" : { "address" :
* {"query":"880 Holmes Lane", "type" : "boolean" } } }
*
* @throws IOException
* @throws SqlParseException
*/
@Test
public void matchQueryTest() throws IOException, SqlParseException, SQLFeatureNotSupportedException {
SqlElasticSearchRequestBuilder select = (SqlElasticSearchRequestBuilder) MainTestSuite.getSearchDao().explain("select address from bank where address= matchQuery('880 Holmes Lane') limit 3").explain();
System.out.println(select);
}
/**
* matchQuery 是利用分词结果进行单个字段的搜索. "query" : { "bool" : { "must" : { "bool" : {
* "should" : [ { "constant_score" : { "query" : { "match" : { "address" : {
* "query" : "Lane", "type" : "boolean" } } }, "boost" : 100.0 } }, {
* "constant_score" : { "query" : { "match" : { "address" : { "query" :
* "Street", "type" : "boolean" } } }, "boost" : 0.5 } } ] } } } }
*
* @throws IOException
* @throws SqlParseException
*/
@Test
public void scoreQueryTest() throws IOException, SqlParseException, SQLFeatureNotSupportedException {
SqlElasticSearchRequestBuilder select = (SqlElasticSearchRequestBuilder) MainTestSuite.getSearchDao().explain("select address from bank where address= score(matchQuery('Lane'),100) or address= score(matchQuery('Street'),0.5) order by _score desc limit 3").explain();
System.out.println(select);
}
/**
* wildcardQuery 是用通配符的方式查找某个term 比如例子中 l*e means leae ltae ....
* "wildcard": { "address" : { "wildcard" : "l*e" } }
*
* @throws IOException
* @throws SqlParseException
*/
@Test
public void wildcardQueryTest() throws IOException, SqlParseException, SQLFeatureNotSupportedException {
SqlElasticSearchRequestBuilder select = (SqlElasticSearchRequestBuilder) MainTestSuite.getSearchDao().explain("select address from bank where address= wildcardQuery('l*e') order by _score desc limit 3").explain();
System.out.println(select);
}
/**
* matchPhraseQueryTest 短语查询完全匹配.
* "address" : {
"query" : "671 Bristol Street",
"type" : "phrase"
}
*
* @throws IOException
* @throws SqlParseException
*/
@Test
public void matchPhraseQueryTest() throws IOException, SqlParseException, SQLFeatureNotSupportedException {
SqlElasticSearchRequestBuilder select = (SqlElasticSearchRequestBuilder) MainTestSuite.getSearchDao().explain("select address from bank where address= matchPhrase('671 Bristol Street') order by _score desc limit 3").explain();
System.out.println(select);
}
}