使用Java API的ElasticSearch全文搜索
我最近开始探索搜索世界,并尝试使用ES作为我的MongoDB的索引。我成功地集成了它们,但我发现搜索API相当复杂和混乱。JavaAPI也没有太大帮助。我能够找到精确的匹配项,但如何进行全文搜索?这是我的密码:使用Java API的ElasticSearch全文搜索,java,lucene,
elasticsearch,Java,Lucene,
elasticsearch,我最近开始探索搜索世界,并尝试使用ES作为我的MongoDB的索引。我成功地集成了它们,但我发现搜索API相当复杂和混乱。JavaAPI也没有太大帮助。我能够找到精确的匹配项,但如何进行全文搜索?这是我的密码: Settings settings = ImmutableSettings.settingsBuilder() .put("cluster.name", "elasticsearch").build(); Client client = new TransportClient(s
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”:“这是一个测试名”
不适用于上述示例。我做错了什么?它的搜索语法似乎使用了Lucence。根据定义,不允许将“*”通配符作为搜索的第一项 在互联网上爬了几个小时后,我终于在网络管理员的帮助下找到了答案。最重要的是接口*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
}
SearchResponse=client.prepareSearch(“mongoindex”)
.setSearchType(SearchType.QUERY_和_FETCH)
.setQuery(字段查询(“名称”、“测试名称”))
.setFrom(0).setSize(60).setExplain(真)
.execute()
.actionGet();
SearchHit[]results=response.getHits().getHits();
用于(搜索命中:结果){
System.out.println(hit.getId());//打印文档的id
Map result=hit.getSource();//检索到的文档
}
对于生成的Map对象,您可以简单地调用
get
方法来检索相关数据。最好查看一下[wildcard Query]()这正是我正在使用的数据库。如果是这样的话,我如何在文本中搜索短语(或子字符串)?我会使用查询字符串,不幸的是,这不是Java中的,这是我的问题的关键,因为我正在使用JavaAPI。我看到了链接,但无法将其转换为Java。以下是源代码: