Akshay Sharma
Akshay Sharma

Reputation: 85

Query string for nested field in elasticsearch ( how to make AND work?)

I am trying to hit a query string on a nested field abc.answer which does not use any analyzer. Here is the query I am using:

   {
  "query": {
      "nested":{
           "path": "abc",
           "query":{
    "query_string": {
      "query": "photo AND delhi",
      "fields": ["answer"]



    }
    },
     "inner_hits": {
          "explain": true
      }

  }
  },
  "explain" : true,
  "sort" : [ {
    "_score" : { }
  } ]
}

I want to search for the document which has both dtp operator and bangalore in the nested field abc. But it is not showing any results.

My nested field structure :

"abc": [
            {
              "updatedAt": 1452073190000,
              "questionId": 1,
              "labelOriginal": "name",
              "createdAt": 1452073190000,
              "answerOriginal": "wexe",
              "answer": "wexe",
              "answerId": 0,
              "label": "name",
              "question": "what is your name?"
            },
            {
              "updatedAt": 1452073190000,
              "questionId": 2,
              "labelOriginal": "mobile",
              "createdAt": 1452073190000,
              "answerOriginal": "9000000000",
              "answer": "9000000000",
              "answerId": 0,
              "label": "mobile",
              "question": "What is your mobile number?"
            },
            {
              "updatedAt": 1452073190000,
              "questionId": 3,
              "labelOriginal": "email id",
              "createdAt": 1452073190000,
              "answerOriginal": "[email protected]",
              "answer": "[email protected]",
              "answerId": 0,
              "label": "email Id",
              "question": "What is your e-mail id ?"
            },
            {
              "updatedAt": 1452073190000,
              "questionId": 4,
              "labelOriginal": "current role",
              "createdAt": 1452073190000,
              "answerOriginal": "dtp operator",
              "answer": "DTP Operator",
              "answerId": 597,
              "label": "current role",
              "question": "What is your current role?"
            },
            {
              "updatedAt": 1452073190000,
              "questionId": 5,
              "labelOriginal": "city",
              "createdAt": 1452073190000,
              "answerOriginal": "bangalore",
              "answer": "Bangalore",
              "answerId": 23,
              "label": "city",
              "question": "Which city do you live in ?"
            },
            {
              "updatedAt": 1452073190000,
              "questionId": 6,
              "labelOriginal": "locality",
              "createdAt": 1452073190000,
              "answerOriginal": "80 ft. road",
              "answer": "80 Ft. Road",
              "answerId": 0,
              "label": "locality",
              "question": "Which locality do you live in ?"
            },
            {
              "updatedAt": 1452073190000,
              "questionId": 13,
              "labelOriginal": "job type",
              "createdAt": 1452073190000,
              "answerOriginal": "part time jobs",
              "answer": "Part Time Jobs",
              "answerId": 64,
              "label": "Job Type",
              "question": "Are you comfortable with working Full Time or Part Time?"
            },
            {
              "labelOriginal": "userDesiredCity",
              "answerOriginal": "bangalore",
              "answer": "Bangalore",
              "answerId": 23,
              "label": "userDesiredCity"
            }

Upvotes: 0

Views: 1382

Answers (1)

Andrei Stefan
Andrei Stefan

Reputation: 52368

You don't need a nested functionality for this kind of query, but the flat structure of a simple array.

Make your rsa field to have include_in_parent: true:

    "rsa": {
      "type": "nested",
      "include_in_parent": true, 
      "properties": {

Re-index the test documents and then use a query like this one (no nested query):

  "query": {
    "query_string": {
      "query": "dtp operator AND bangalore",
      "fields": [
        "rsa.answer"
      ]
    }
  }

Upvotes: 1

Related Questions