Elasticsearch 邻近查询示例(全切分分词)
JAVA API方式:

1 SpanNearQueryBuilder span = QueryBuilders.spanNearQuery(); 2 span.clause(QueryBuilders.spanTermQuery("Text", "学" )); 3 span.clause(QueryBuilders.spanTermQuery("Text", "联" )); 4 span.inOrder( true ).slop(1 ); 5 SearchRequestBuilder rs = client.prepareSearch("weiboall" ) 6 .setQuery(span).setFrom(0).setSize(20 ); 7 SearchResponse response = rs.get();
REST方式(JSON):

1 { 2 "from": 0 , 3 "size": 20 , 4 "query" : { 5 "span_near" : { 6 "clauses" : [ 7 { 8 "span_term" : { 9 "Text" : { 10 "value": "在" 11 } 12 } 13 }, 14 { 15 "span_term" : { 16 "Text" : { 17 "value": "讨" 18 } 19 } 20 } 21 ], 22 "slop": 0 , 23 "in_order": true 24 } 25 } 26 }
Elasticsearch 邻近查询示例(IK分词)
这种方式利用前后缀组合查询,可以识别查询中的未登陆词、新词等
java API方式:

1 MultiTermQueryBuilder mqb1 = new WildcardQueryBuilder( " Text " , " *学 " ); 2 SpanQueryBuilder sb1= new SpanMultiTermQueryBuilder(mqb1); 3 MultiTermQueryBuilder mqb2 = new WildcardQueryBuilder( " Text " , " 联* " ); 4 SpanQueryBuilder sb2= new SpanMultiTermQueryBuilder(mqb2); 5 SpanNearQueryBuilder spanb= new SpanNearQueryBuilder(); 6 spanb.clause(sb1); 7 spanb.clause(sb2); 8 spanb.inOrder( true ); 9 spanb.slop( 0 ); 10 SearchRequestBuilder rs = client.prepareSearch( " weiboall " ) 11 .setQuery(spanb).setFrom( 0 ).setSize( 20 ); 12 System. out .println(rs.toString()); 13 SearchResponse response = rs. get ();
Rest(json)方式:

1 { 2 "from" : 0 , 3 "size" : 20 , 4 "query" : { 5 "span_near" : { 6 "clauses" : [ { 7 "span_multi" : { 8 "match" : { 9 "wildcard" : { 10 "Text" : { 11 "wildcard" : "*学" 12 } 13 } 14 } 15 } 16 }, { 17 "span_multi" : { 18 "match" : { 19 "wildcard" : { 20 "Text" : { 21 "wildcard" : "联*" 22 } 23 } 24 } 25 } 26 } ], 27 "slop" : 0 , 28 "in_order" : true 29 } 30 } 31 }