Search code examples
pythonscalaelasticsearchelastic4s

Query with elastic4s yielding zero results


I'm playing with and learning scala and elastic4s for elasticsearch.

I have a python script that uses the official elasticsearch module. My code in python looks like this:

res=helpers.scan(es, query={"_source": ["http_uri", "header_user_agent"],"query": {"query_string": {"query": "message:key"}}}, index="")

My above python code works. I get 900k results and I process them and so on.

I'm using the basic scala code to try out e4s. This is just a simple query. Is my query wrong?

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)
    }
}

My result on running this:

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" : [ ]
  }
}

And the response with a curl query:

$ 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" : [ {

Solution

  • val client = ElasticClient.local
    

    this line means that elastic4s will create it's own data store, so if you not index your data into this place, your search result is nothing. if you want to connect your own Elasticsearch, you can:

      //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))
    

    and do the search action.