使用 elastic4s 查询产生零结果
Query with elastic4s yielding zero results
我正在使用和学习用于 elasticsearch 的 scala 和 elastic4s。
我有一个使用官方 elasticsearch 模块的 python 脚本。我在 python 中的代码如下所示:
res=helpers.scan(es, query={"_source": ["http_uri", "header_user_agent"],"query": {"query_string": {"query": "message:key"}}}, index="")
我上面的 python 代码有效。我得到 900k 个结果并处理它们等等。
我正在使用基本的 Scala 代码来试用 e4s。这只是一个简单的查询。我的查询有误吗?
import com.sksamuel.elastic4s.ElasticClient
import com.sksamuel.elastic4s.ElasticDsl._
object Banana {
def main(args: Array[String]) {
val client = ElasticClient.local
val res = client execute { search in "*" query "apiKey" } await
println(res.getHits.totalHits)
println(res)
}
}
我在 运行 上的结果:
info] Running Banana
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
0
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 0,
"successful" : 0,
"failed" : 0
},
"hits" : {
"total" : 0,
"max_score" : 0.0,
"hits" : [ ]
}
}
以及带有 curl 查询的响应:
$ curl -s 'localhost:9200/_search?q=apiKey&pretty=true' | head -12
{
"took" : 21,
"timed_out" : false,
"_shards" : {
"total" : 1200,
"successful" : 1200,
"failed" : 0
},
"hits" : {
"total" : 756253,
"max_score" : 1.5905869,
"hits" : [ {
val client = ElasticClient.local
这一行意味着 elastic4s
将创建自己的数据存储,因此如果您不将数据索引到此位置,您的搜索结果将一无所获。如果您想连接自己的 Elasticsearch
,您可以:
//Set the Cluster name
val settings = ImmutableSettings.settingsBuilder().put("cluster.name", "elasticsearch").build()
//Set the Cluster Connection
val client = ElasticClient.remote(settings, ("127.0.0.1", 9300))
并执行搜索操作。
@chengpohi 是正确的,当你使用 val client = ElasticClient.local
时,你正在创建一个本地节点并且没有连接到你的集群,所以你需要使用
val uri = ElasticsearchClientUri("elasticsearch://127.0.0.1:9300")
val settings = ImmutableSettings.settingsBuilder().put("cluster.name", "myClusterName").build()
val client = ElasticClient.remote(settings, uri)
但此外,您正在搜索一个名为 *
的索引,它并不像您认为的那样意味着所有索引。如果你想在所有索引中搜索,那么你需要使用_all
eg
client execute {
search in "_all" query "findme"
}
我正在使用和学习用于 elasticsearch 的 scala 和 elastic4s。
我有一个使用官方 elasticsearch 模块的 python 脚本。我在 python 中的代码如下所示:
res=helpers.scan(es, query={"_source": ["http_uri", "header_user_agent"],"query": {"query_string": {"query": "message:key"}}}, index="")
我上面的 python 代码有效。我得到 900k 个结果并处理它们等等。
我正在使用基本的 Scala 代码来试用 e4s。这只是一个简单的查询。我的查询有误吗?
import com.sksamuel.elastic4s.ElasticClient
import com.sksamuel.elastic4s.ElasticDsl._
object Banana {
def main(args: Array[String]) {
val client = ElasticClient.local
val res = client execute { search in "*" query "apiKey" } await
println(res.getHits.totalHits)
println(res)
}
}
我在 运行 上的结果:
info] Running Banana
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
0
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 0,
"successful" : 0,
"failed" : 0
},
"hits" : {
"total" : 0,
"max_score" : 0.0,
"hits" : [ ]
}
}
以及带有 curl 查询的响应:
$ curl -s 'localhost:9200/_search?q=apiKey&pretty=true' | head -12
{
"took" : 21,
"timed_out" : false,
"_shards" : {
"total" : 1200,
"successful" : 1200,
"failed" : 0
},
"hits" : {
"total" : 756253,
"max_score" : 1.5905869,
"hits" : [ {
val client = ElasticClient.local
这一行意味着 elastic4s
将创建自己的数据存储,因此如果您不将数据索引到此位置,您的搜索结果将一无所获。如果您想连接自己的 Elasticsearch
,您可以:
//Set the Cluster name
val settings = ImmutableSettings.settingsBuilder().put("cluster.name", "elasticsearch").build()
//Set the Cluster Connection
val client = ElasticClient.remote(settings, ("127.0.0.1", 9300))
并执行搜索操作。
@chengpohi 是正确的,当你使用 val client = ElasticClient.local
时,你正在创建一个本地节点并且没有连接到你的集群,所以你需要使用
val uri = ElasticsearchClientUri("elasticsearch://127.0.0.1:9300")
val settings = ImmutableSettings.settingsBuilder().put("cluster.name", "myClusterName").build()
val client = ElasticClient.remote(settings, uri)
但此外,您正在搜索一个名为 *
的索引,它并不像您认为的那样意味着所有索引。如果你想在所有索引中搜索,那么你需要使用_all
eg
client execute {
search in "_all" query "findme"
}