Sunil Lulla
Sunil Lulla

Reputation: 813

Elastic search is not showing the fields

I am newbie in Elastic search. I am trying to implement it in Python for one of my college projects. I want to use Elastic search as a resume indexer. Everything is working fine except it is showing all the fields in _source field .I don't want some fields and I tried too many thing but nothing is working. Below is my code

es = Elastcisearch()
  query = {
"_source":{
    "exclude":["resume_content"]
            },
        "query":{
            "match":{
                "resume_content":{
                    "query":keyword,
                    "fuzziness":"Auto",
                    "operator":"and",
                    "store":"false"
                        }
                    }
                }
            }

    res = es.search(size=es_conf["MAX_SEARCH_RESULTS_LIMIT"],index=es_conf["ELASTIC_INDEX_NAME"], body=query)

return res

where es_conf is my local dictionary.

Apart from the above code I have also tried _source:false ,_source:[name of my fields], fields:[name of my fields] . I also tried store=False in my search method. Any ideas?

Upvotes: 0

Views: 1270

Answers (1)

Sloan Ahrens
Sloan Ahrens

Reputation: 8718

Did you try just using fields?

Here's a simple example. I set up a mapping with three fields, (imaginatively) named "field1", "field2", "field3":

PUT /test_index
{
   "mappings": {
      "doc": {
         "properties": {
            "field1": {
               "type": "string"
            },
            "field2": {
               "type": "string"
            },
            "field3": {
               "type": "string"
            }
         }
      }
   }
}

Then I indexed three documents:

POST /test_index/doc/_bulk
{"index":{"_id":1}}
{"field1":"text11","field2":"text12","field3":"text13"}
{"index":{"_id":2}}
{"field1":"text21","field2":"text22","field3":"text23"}
{"index":{"_id":3}}
{"field1":"text31","field2":"text32","field3":"text33"}

And let's say I want to find docs that contain "text22" in field "field2", but I only want to return the contents of "field1" and "field2". Here's the query:

POST /test_index/doc/_search
{
    "fields": [
       "field1", "field2"
    ], 
    "query": {
        "match": {
           "field2": "text22"
        }
    }
}

which returns:

{
   "took": 3,
   "timed_out": false,
   "_shards": {
      "total": 1,
      "successful": 1,
      "failed": 0
   },
   "hits": {
      "total": 1,
      "max_score": 1.4054651,
      "hits": [
         {
            "_index": "test_index",
            "_type": "doc",
            "_id": "2",
            "_score": 1.4054651,
            "fields": {
               "field1": [
                  "text21"
               ],
               "field2": [
                  "text22"
               ]
            }
         }
      ]
   }
}

Here's the code I used: http://sense.qbox.io/gist/69dabcf9f6e14fb1961ec9f761645c92aa8e528b

It should be straightforward to set this up with the Python adapter.

Upvotes: 1

Related Questions