刚开始使用ElasticSearch和JAVA Client API本身,并尝试使用非常简单的Hello World程序。但是,当我尝试在文档中搜索特定关键字时,我没有得到任何结果。
在这需要一些帮助 -
/venues
PutJsonDocument方法 -
Node node = nodeBuilder().clusterName("elasticsearch").node();
Client client = node.client();
client.prepareIndex("kodcucom", "article", "1")
.setSource(putJsonDocument("Anurag",
"ElasticSeach provides Java API, thus it executes all operations "
+ "asynchronously by using client object..",
new Date(), new String[] { "elasticsearch" }, "Anurag Jain"))
.execute().actionGet();
client.prepareIndex("kodcucom", "article", "2")
.setSource(putJsonDocument("Java Web Application and ElasticSearch (Video)",
"Today, here I am for exemplifying the usage of ElasticSearch which is an open source, distributed "
+ "and scalable full text search engine and a data analysis tool in a Java web application.",
new Date(), new String[] { "elasticsearch" }, "Saanchi Jain"))
.execute().actionGet();
这是将文档放在ES中,因为getDocuments正在给我结果。
然而,搜索文件并不适合我 -
public static Map<String, Object> putJsonDocument(String title, String content, Date postDate, String[] tags,
String author) {
Map<String, Object> jsonDocument = new HashMap<String, Object>();
jsonDocument.put("title", title);
jsonDocument.put("content", content);
jsonDocument.put("postDate", postDate);
jsonDocument.put("tags", tags);
jsonDocument.put("author", author);
return jsonDocument;
}
这就是它的名称 -
public static void searchDocument(Client client, String index, String type, String field, String value) {
SearchResponse response = client.prepareSearch(index)
.setTypes(type)
.setSearchType(SearchType.DEFAULT)
.setQuery(QueryBuilders.termQuery(field, value))
.setFrom(0).setSize(60)
.setExplain(true)
.execute()
.actionGet();
SearchHit[] results = response.getHits().getHits();
System.out.println("Current results: " + results.length);
for (SearchHit hit : results) {
System.out.println("------------------------------");
Map<String, Object> result = hit.getSource();
System.out.println(result);
}
}
输出是 -
searchDocument(client, "kodcucom", "article", "title", "Anurag");
现在我的目标很简单,我只想在标题字段中搜索关键字“Anurag”并返回相应的文档。有什么建议/指示吗?
BR,
阿努拉格
答案 0 :(得分:1)
这可能是因为默认情况下您的title
字段是analyzed
字符串。如果您以小写字母搜索anurag
,则会获得匹配。
searchDocument(client, "kodcucom", "article", "title", "anurag");
^
|
use lowercase here
答案 1 :(得分:1)
由于您在同一个JAVA程序上依次运行Elasticsearch
索引和搜索API,因此没有足够的时间使用新的索引json文档刷新Elasticsearch
索引。
默认情况下,Elasticsearch
会每1秒定期调用一次刷新
JAVA代码(如您所知)运行速度比Elasticsearch
准备文档进行搜索所花费的时间更快,因此它不会返回您的文档。
解决问题的一种方法是在搜索之前Thread.sleep(2000);
(这是一种非常糟糕的做法,但对于学习API会起作用)。
解决问题的另一种方法是在搜索之前使用prepareRefresh()
:
client.admin().indices().prepareRefresh().get();
其中强制Elasticsearch
刷新其索引并为连续搜索请求做好准备。