繁体   English   中英

ElasticSearch使用Java API进行全文搜索

[英]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方法即可检索相关数据。

看起来弹性搜索中的termQuery使用了Lucence的搜索语法。 根据Lucene文档 ,“*”通配符不允许作为搜索的第一个术语。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM