分布式搜索Elasticsearch——QueryBuilders.termQuery

来源:互联网 发布:jquery form to json 编辑:程序博客网 时间:2024/05/28 04:55

  注:该文项目基础为分布式搜索:Elasticsearch-项目过程(一)和Elasticsearch-项目过程(二),项目骨架可至这里下载。

        ES源代码中对termQuery的描述如下所示:

[java] view plain copy
  1. /** 
  2.  * A Query that matches documents containing a term. 
  3.  * 
  4.  * @param name  The name of the field 
  5.  * @param value The value of the term 
  6.  */  
  7. public static TermQueryBuilder termQuery(String name, String value) {  
  8.     return new TermQueryBuilder(name, value);  
  9. }  

        termQuery是我花了较多时间才了解的一种Query(因之前对Lucene的研究较少),经总结发现,termQuery中的value有以下情况:

        1. 若value为汉字,则大部分情况下,只能为一个汉字;

        2. 若value为英文,则是一个单词;

        termQuery代码如下所示:

[java] view plain copy
  1. /** 
  2.  * @author Geloin 
  3.  */  
  4. package com.geloin.esample.util;  
  5.   
  6. import java.util.UUID;  
  7.   
  8. import org.elasticsearch.action.search.SearchResponse;  
  9. import org.elasticsearch.index.query.QueryBuilder;  
  10. import org.elasticsearch.index.query.QueryBuilders;  
  11. import org.elasticsearch.search.SearchHit;  
  12. import org.elasticsearch.search.SearchHits;  
  13. import org.junit.Test;  
  14.   
  15. import com.fasterxml.jackson.databind.ObjectMapper;  
  16. import com.geloin.esample.BaseTest;  
  17. import com.geloin.esample.entity.Person;  
  18.   
  19. /** 
  20.  * @author Geloin 
  21.  *  
  22.  */  
  23. public class TermQueryTest extends BaseTest {  
  24.   
  25.     @Test  
  26.     public void termQuery() {  
  27.         String index = "user";  
  28.         String type = "tb_person";  
  29.         try {  
  30.             // 创建索引  
  31.             Person p = new Person();  
  32.             p.setId(UUID.randomUUID().toString());  
  33.             p.setAge(20);  
  34.             p.setIsStudent(false);  
  35.             p.setSex("男");  
  36.             p.setName("别克");  
  37.   
  38.             ObjectMapper mapper = new ObjectMapper();  
  39.             String source = mapper.writeValueAsString(p);  
  40.   
  41.             client.prepareIndex(index, type, p.getId()).setSource(source)  
  42.                     .execute().actionGet();  
  43.   
  44.             // 查询  
  45.             QueryBuilder qb = QueryBuilders.termQuery("name""别");  
  46.   
  47.             SearchResponse sResponse = client.prepareSearch(index)  
  48.                     .setTypes(type).setQuery(qb).setFrom(0).setSize(12)  
  49.                     .execute().actionGet();  
  50.             SearchHits hits = sResponse.getHits();  
  51.   
  52.             if (null != hits && hits.totalHits() > 0) {  
  53.                 for (SearchHit hit : hits) {  
  54.                     String json = hit.getSourceAsString();  
  55.                     Person newPerson = mapper.readValue(json, Person.class);  
  56.                     System.out.println("name\t\t" + newPerson.getName());  
  57.                     System.out.println("sex\t\t" + newPerson.getSex());  
  58.                     System.out.println("age\t\t" + newPerson.getAge());  
  59.                     System.out.println("isStudent\t\t"  
  60.                             + newPerson.getIsStudent());  
  61.                 }  
  62.             } else {  
  63.                 log.info("没有查询到任何结果!");  
  64.             }  
  65.   
  66.             // 防止出现:远程主机强迫关闭了一个现有的连接  
  67.             Thread.sleep(100000);  
  68.         } catch (Exception e) {  
  69.             e.printStackTrace();  
  70.         }  
  71.   
  72.     }  
  73. }  
0 0