Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java API的ElasticSearch全文搜索_Java_Lucene_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Java,Lucene,elasticsearch" /> elasticsearch,Java,Lucene,elasticsearch" />

使用Java API的ElasticSearch全文搜索

使用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

我最近开始探索搜索世界,并尝试使用ES作为我的MongoDB的索引。我成功地集成了它们,但我发现搜索API相当复杂和混乱。JavaAPI也没有太大帮助。我能够找到精确的匹配项,但如何进行全文搜索?这是我的密码:

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。以下是源代码: