分布式搜索Elasticsearch——项目过程(二)
来源:互联网 发布:ipad游戏大厅网络异常 编辑:程序博客网 时间:2024/06/16 16:21
步骤七:将elasticsearch-analysis-paoding-master项目中的config/paoding/dic文件夹复制到硬盘上的任一目录,假设为d:\dic;
步骤八:将elasticsearch-analysis-paoding-master项目中的config/paoding/paoding-analyzer.properties文件复制到esmple项目中的src/main/resources/config/paoding/文件夹下,复制后esmple的文件结构如下所示:
![](http://img.blog.csdn.net/20130516113040982)
paoding-analyzer.properties的内容如下所示:
- #PaodingAnlyzer Mode, "most-words", "max-word-length", "class:com.xxx.MyTokenCollectorImpl"...
- paoding.analyzer.mode=most-words
- paoding.analyzer.dictionaries.compiler=net.paoding.analysis.analyzer.impl.MostWordsModeDictionariesCompiler
- #paoding.analyzer.mode=max-word-length
- #paoding.analyzer.dictionaries.compiler=net.paoding.analysis.analyzer.impl.SortingDictionariesCompiler
-
-
-
- #values are "system-env" or "this";
- #if value is "this" , using the paoding.dic.home as dicHome if configed!
- #paoding.dic.home.config-first=system-env
-
- #dictionary home (directory)
- #"classpath:xxx" means dictionary home is in classpath.
- #e.g "classpath:dic" means dictionaries are in "classes/dic" directory or any other classpath directory
- paoding.dic.home=d:/dic
-
- #seconds for dic modification detection
- paoding.dic.detector.interval=60
-
-
-
-
- # an example of knife with properties setting
- #paoding.knife.class.fakeKnife=net.paoding.analysis.knife.FakeKnife
- #paoding.knife.class.fakeKnife.name=Fake Knife
- #paoding.knife.class.fakeKnife.intParam=34
- #paoding.knife.class.fakeKnife.inner.bool=true
-
-
-
- paoding.knife.class.letterKnife=net.paoding.analysis.knife.LetterKnife
- paoding.knife.class.numberKnife=net.paoding.analysis.knife.NumberKnife
- paoding.knife.class.cjkKnife=net.paoding.analysis.knife.CJKKnife
步骤九:在esmple的src/test/java下添加BaseTest、TermQueryTest、MatchQueryTest、MatchAllQueryTest四个类,添加后结构如下所示:![](http://img.blog.csdn.net/20130516113435799)
这四个类的内容如下所示:
- ******************************BaseTest.java******************************
-
-
-
- package com.geloin.esample;
-
- import org.apache.log4j.Level;
- import org.apache.log4j.Logger;
- import org.elasticsearch.client.Client;
-
- import com.fasterxml.jackson.databind.ObjectMapper;
- import com.geloin.esample.util.ElasticSearchUtil;
- import com.geloin.esample.util.LoggerFactory;
-
-
-
-
-
- public class BaseTest {
- protected static Logger log = LoggerFactory.getInstance(BaseTest.class, Level.INFO);
- protected static String index = "user";
- protected static String type = "tb_person";
- protected static Client client = ElasticSearchUtil.createClient();
- protected static ObjectMapper mapper = new ObjectMapper();
- }
-
- ******************************TermQueryTest.java******************************
-
-
-
- package com.geloin.esample.util;
-
- import java.util.UUID;
-
- import org.elasticsearch.action.search.SearchResponse;
- import org.elasticsearch.index.query.QueryBuilder;
- import org.elasticsearch.index.query.QueryBuilders;
- import org.elasticsearch.search.SearchHit;
- import org.elasticsearch.search.SearchHits;
- import org.junit.Test;
-
- import com.fasterxml.jackson.databind.ObjectMapper;
- import com.geloin.esample.BaseTest;
- import com.geloin.esample.entity.Person;
-
-
-
-
-
- public class TermQueryTest extends BaseTest {
-
- @Test
- public void termQuery() {
- String index = "user";
- String type = "tb_person";
- try {
-
- Person p = new Person();
- p.setId(UUID.randomUUID().toString());
- p.setAge(20);
- p.setIsStudent(false);
- p.setSex("男");
- p.setName("别克");
-
- ObjectMapper mapper = new ObjectMapper();
- String source = mapper.writeValueAsString(p);
-
- client.prepareIndex(index, type, p.getId()).setSource(source)
- .execute().actionGet();
-
-
- QueryBuilder qb = QueryBuilders.termQuery("name", "别");
-
- SearchResponse sResponse = client.prepareSearch(index)
- .setTypes(type).setQuery(qb).setFrom(0).setSize(12)
- .execute().actionGet();
- SearchHits hits = sResponse.getHits();
-
- if (null != hits && hits.totalHits() > 0) {
- for (SearchHit hit : hits) {
- String json = hit.getSourceAsString();
- Person newPerson = mapper.readValue(json, Person.class);
- System.out.println("name\t\t" + newPerson.getName());
- System.out.println("sex\t\t" + newPerson.getSex());
- System.out.println("age\t\t" + newPerson.getAge());
- System.out.println("isStudent\t\t"
- + newPerson.getIsStudent());
- }
- } else {
- log.info("没有查询到任何结果!");
- }
-
-
- Thread.sleep(100000);
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- }
- }
-
- ******************************MatchAllQueryTest.java******************************
-
-
-
- package com.geloin.esample.util;
-
- import java.util.UUID;
-
- import junit.framework.Assert;
-
- import org.elasticsearch.action.bulk.BulkRequestBuilder;
- import org.elasticsearch.action.bulk.BulkResponse;
- import org.elasticsearch.action.index.IndexRequest;
- import org.elasticsearch.action.search.SearchResponse;
- import org.elasticsearch.index.query.QueryBuilder;
- import org.elasticsearch.index.query.QueryBuilders;
- import org.elasticsearch.search.SearchHit;
- import org.elasticsearch.search.SearchHits;
- import org.junit.Test;
-
- import com.geloin.esample.BaseTest;
- import com.geloin.esample.entity.Person;
-
-
-
-
-
- public class MatchAllQueryTest extends BaseTest {
-
- @Test
- public void matchAllQuery() {
- try {
-
- BulkRequestBuilder builder = client.prepareBulk();
-
- for (int i = 0; i < 10; i++) {
- Person p = new Person();
- p.setAge(20 + i);
- p.setId(UUID.randomUUID().toString());
- p.setIsStudent(true);
- p.setName("小别克听老别克讲别克的故事" + i);
- p.setSex("男");
-
- String source = ElasticSearchUtil.BeanToJson(p);
-
- IndexRequest request = client
- .prepareIndex(index, type, p.getId()).setSource(source)
- .request();
-
- builder.add(request);
- }
-
- BulkResponse response = builder.execute().actionGet();
- if (response.hasFailures()) {
- Assert.fail("创建索引失败!");
- }
-
-
- QueryBuilder qb = QueryBuilders.matchAllQuery();
- SearchResponse sr = client.prepareSearch(index).setTypes(type)
-
- .setQuery(qb).setFrom(0).setSize(12).execute().actionGet();
-
- SearchHits hits = sr.getHits();
-
- if (null != hits && hits.totalHits() > 0) {
- for (SearchHit hit : hits) {
- String json = hit.getSourceAsString();
-
- Person newPerson = mapper.readValue(json, Person.class);
- System.out.println("name\t\t" + newPerson.getName());
- System.out.println("sex\t\t" + newPerson.getSex());
- System.out.println("age\t\t" + newPerson.getAge());
- System.out.println("isStudent\t\t"
- + newPerson.getIsStudent());
- }
- } else {
- log.error("没有查询到任何内容!");
- return;
- }
-
-
- long count = client.prepareCount(index).setTypes(type).setQuery(qb).execute().actionGet().count();
-
- log.info("符合条件的总数量为:" + count);
-
- Thread.sleep(1000000);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
-
- ******************************MatchQueryTest.java******************************
-
-
-
- package com.geloin.esample.util;
-
- import java.util.UUID;
-
- import junit.framework.Assert;
-
- import org.elasticsearch.action.bulk.BulkRequestBuilder;
- import org.elasticsearch.action.bulk.BulkResponse;
- import org.elasticsearch.action.index.IndexRequest;
- import org.elasticsearch.action.search.SearchResponse;
- import org.elasticsearch.index.query.QueryBuilder;
- import org.elasticsearch.index.query.QueryBuilders;
- import org.elasticsearch.search.SearchHit;
- import org.elasticsearch.search.SearchHits;
- import org.junit.Test;
-
- import com.geloin.esample.BaseTest;
- import com.geloin.esample.entity.Person;
-
-
-
-
-
- public class MatchQueryTest extends BaseTest {
-
- @Test
- public void matchQuery() {
- try {
- String name = "name";
- String text = "别克";
- BulkRequestBuilder requestBuilder = client.prepareBulk();
-
- for (int i = 0; i < 10; i++) {
- Person p = new Person();
- p.setAge(20 + i);
- p.setId(UUID.randomUUID().toString());
- p.setIsStudent(true);
- p.setName("小别克听老别克讲别克的故事" + i);
- p.setSex("男");
-
- String source = ElasticSearchUtil.BeanToJson(p);
- IndexRequest request = client
- .prepareIndex(index, type, p.getId()).setSource(source)
- .request();
-
- requestBuilder.add(request);
- }
- BulkResponse response = requestBuilder.execute().actionGet();
- if (response.hasFailures()) {
- Assert.fail("创建索引失败!");
- }
-
-
- QueryBuilder qb = QueryBuilders.matchQuery(name, text);
- SearchResponse searchResponse = client.prepareSearch(index)
- .setTypes(type).setQuery(qb).setFrom(0).setSize(12)
- .execute().actionGet();
-
- SearchHits hits = searchResponse.getHits();
- if (null == hits || hits.totalHits() == 0) {
- log.error("没有查询到任何结果!");
- return;
- } else {
- for (SearchHit hit : hits) {
- String json = hit.getSourceAsString();
-
- Person newPerson = mapper.readValue(json, Person.class);
- System.out.println("name\t\t" + newPerson.getName());
- System.out.println("sex\t\t" + newPerson.getSex());
- System.out.println("age\t\t" + newPerson.getAge());
- System.out.println("isStudent\t\t"
- + newPerson.getIsStudent());
- }
- }
-
- Thread.sleep(1000000);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
步骤十:到步骤一安排的ES文件夹下,找到bin/elasticsearch.bat,双击启动之,谨记:config/elasticsearch.yml下可配置cluster.name,请保持其值与esmine的config.properties文件中配置的一致。 接着,就可以在TermQueryTest、MatchAllQueryTest或MatchQueryTest中执行单元测试了,请注意一个大概率事件:假设你现在执行TermQueryTest的测试,在第一次测试时,你可能查询不到结果,那是因为索引未创建成功即开始查询,所以如果出现第一次查询没有结果,你可以再执行一次TermQueryTest。
关键配置:esmine中的config.properties中,node.client的值请设置为true,这样做的目的是使得esmine为一个客户端,而不用于存储数据,在此处进行配置的目的,是考虑到esmine可能部署多个,此时,你即可以设置某(些)个esmine为client,某(些)个esmine为client。
0 0