[英]ElasticSearch full text search using Java API
我最近开始探索搜索世界,并尝试使用ES作为MongoDB的索引。 我成功地将它们集成在一起,但我发现搜索API相当复杂和令人困惑。 Java API也没有太大帮助。 我能找到完全匹配的内容,但如何进行全文搜索? 这是我的代码:
Settings settings = ImmutableSettings.settingsBuilder()
.put("cluster.name", "elasticsearch").build();
Client client = new TransportClient(settings)
.addTransportAddress(new InetSocketTransportAddress("host-ip", 9300));
SearchResponse response = client.prepareSearch("mongoindex")
.setSearchType(SearchType.QUERY_AND_FETCH)
.setQuery(termQuery("name", "*name*"))
.setFrom(0).setSize(60).setExplain(true)
.execute()
.actionGet();
我使用.setQuery(termQuery("name", "testname"))
找到"name":"testname"
没有问题,但"name":"this is a test name"
不能与上面的例子一起使用。 我究竟做错了什么?
在网上爬了几个小时之后,我已经设法在javadocs的帮助下解决了这个问题。 最重要的是接口*QueryBuilder*
及其实现类。 我使用FieldQueryBuilder
进行查询,如下面的setQuery
方法所示。
SearchResponse response = client.prepareSearch("mongoindex")
.setSearchType(SearchType.QUERY_AND_FETCH)
.setQuery(fieldQuery("name", "test name"))
.setFrom(0).setSize(60).setExplain(true)
.execute()
.actionGet();
SearchHit[] results = response.getHits().getHits();
for (SearchHit hit : results) {
System.out.println(hit.getId()); //prints out the id of the document
Map<String,Object> result = hit.getSource(); //the retrieved document
}
使用生成的Map对象,您只需调用get
方法即可检索相关数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.