Elasticsearch:匹配查询 returns 错误结果 (Java API)
Elasticsearch: Match query returns wrong results (Java API)
我有以下问题:当我执行这个命令时
curl -XGET "localhost:9200/customer/external/_search?pretty" -d @json.txt
其中 json.txt 看起来像这样:
{ "query":{ "match":{ "_id":"1" } } }
我得到以下输出(我将其缩短):
{
"hits" : {
"total" : 1,
"max_score" : 1.0,
"hits" : [ {
"_index" : "customer",
"_type" : "external",
"_id" : "1",
"_score" : 1.0,
"_source":{
"name":"Jan",
"age":99,
"address":{
"city":"KKKKKKK",
"zip":"xxxx"
}
}
} ]
}
现在我正在尝试使用 Java API 做同样的事情,但我就是无法完成它(我尝试了 8 种不同的方法)。我总是得到 0 次点击。在代码中,我现在将源文件直接设置为字符串作为源,但如您所见,我也尝试使用 XContentBuilder
和 WrapperQueryBuilder
版本,但没有任何效果。这是我的代码:
public void processQuery(String filePath, String index, String... types) {
String source = convertFileToString(filePath);
//XContentBuilder query = null;
//try {
// JSONObject json = new JSONObject(source.trim());
// query = convertJsonToXContentBuilder(json);
//} catch (...) {...}
//WrapperQueryBuilder query = QueryBuilders.wrapperQuery(source);
SearchResponse response = client.prepareSearch(index)
.setSource(source)
// .setQuery(query)
.setTypes(types)
.get();
}
作为回应,我根本没有得到任何点击:
{
"hits" : {
"total" : 0,
"max_score" : null,
"hits" : [ ]
}
}
我希望有人对此有所了解,因为我已经厌倦了寻找解决方案:/
此致,
一月
您应该使用 POST 进行搜索。
使用 GET 将忽略搜索正文并返回所有结果。
curl -XPOST "localhost:9200/customer/external/_search?pretty" -d @json.txt
很抱歉有新的“答案”,但我无法编辑我的问题。所以我想通了,但我现在不知道如何进步。当我 运行 在调试模式下它工作正常(我在 JUnit
测试中使用它)。所以我想也许我关闭连接太早了所以我添加了一个 Thread.sleep(5000)
但它仍然失败。它只在调试模式下工作:/如果它很重要,我正在使用 TransportClient
.
有点尴尬,但我希望有人知道原因...
干杯,
一月
编辑:
问题已解决:由于我在单元测试中使用它并且我每次都清空并重新加载数据库的内容,因此执行请求时内容尚未准备好。我现在正在等待状态变为绿色,然后开始测试。
我有以下问题:当我执行这个命令时
curl -XGET "localhost:9200/customer/external/_search?pretty" -d @json.txt
其中 json.txt 看起来像这样:
{ "query":{ "match":{ "_id":"1" } } }
我得到以下输出(我将其缩短):
{
"hits" : {
"total" : 1,
"max_score" : 1.0,
"hits" : [ {
"_index" : "customer",
"_type" : "external",
"_id" : "1",
"_score" : 1.0,
"_source":{
"name":"Jan",
"age":99,
"address":{
"city":"KKKKKKK",
"zip":"xxxx"
}
}
} ]
}
现在我正在尝试使用 Java API 做同样的事情,但我就是无法完成它(我尝试了 8 种不同的方法)。我总是得到 0 次点击。在代码中,我现在将源文件直接设置为字符串作为源,但如您所见,我也尝试使用 XContentBuilder
和 WrapperQueryBuilder
版本,但没有任何效果。这是我的代码:
public void processQuery(String filePath, String index, String... types) {
String source = convertFileToString(filePath);
//XContentBuilder query = null;
//try {
// JSONObject json = new JSONObject(source.trim());
// query = convertJsonToXContentBuilder(json);
//} catch (...) {...}
//WrapperQueryBuilder query = QueryBuilders.wrapperQuery(source);
SearchResponse response = client.prepareSearch(index)
.setSource(source)
// .setQuery(query)
.setTypes(types)
.get();
}
作为回应,我根本没有得到任何点击:
{
"hits" : {
"total" : 0,
"max_score" : null,
"hits" : [ ]
}
}
我希望有人对此有所了解,因为我已经厌倦了寻找解决方案:/
此致, 一月
您应该使用 POST 进行搜索。 使用 GET 将忽略搜索正文并返回所有结果。
curl -XPOST "localhost:9200/customer/external/_search?pretty" -d @json.txt
很抱歉有新的“答案”,但我无法编辑我的问题。所以我想通了,但我现在不知道如何进步。当我 运行 在调试模式下它工作正常(我在 JUnit
测试中使用它)。所以我想也许我关闭连接太早了所以我添加了一个 Thread.sleep(5000)
但它仍然失败。它只在调试模式下工作:/如果它很重要,我正在使用 TransportClient
.
有点尴尬,但我希望有人知道原因...
干杯, 一月
编辑:
问题已解决:由于我在单元测试中使用它并且我每次都清空并重新加载数据库的内容,因此执行请求时内容尚未准备好。我现在正在等待状态变为绿色,然后开始测试。