Search code examples
c#elasticsearchkibananestelasticsearch.net

Elastic Search Terms query not giving result but match query is giving


I am using a Kibana query

GET /MY_INDEX_HERE/_search
{
  "query": {
    "match": {
      "AccountId": 
        "bc73afda-d4f2"
      
    }
  }
}

and it is giving me the results, I expect. But when I use a terms query, it is not showing any result, although the values are same. There is no difference in any character or any case, everything is lower-case only.

My final goal is to get the result in my C# code. My query is

.Query(q => q.Raw(strQuery) && q.Terms(c => c.Name("by_account").Field(p => p.AccountsList).Terms(accountTerms))

With this query I am getting zero results, but if I comment the second query I am getting results:

.Query(q => q.Raw(strQuery) //&& q.Terms(c => c.Name("by_account").Field(p => p.AccountsList).Terms(accountTerms))

Right now my

strQuery ={\"bool\":{\"must\":[{\"match_phrase_prefix\":{\"fullname\":\"test\"}}]}} 

and

  List<string> accountTerms = new List<string>();
                accountTerms.Add("bc73afda-d4f2");

The AccountId is a GUID type, I cant paste the full value here, hence it's not a complete value.


Solution

  • Troubleshooting Kibana 'terms' Query

    The terms query is an exact match query, which means it doesn't analyze the query input or the field values before matching them.

    If the AccountId field in your index has been mapped as a keyword field or a text field with the keyword type, then the input bc73afda-d4f2 will be treated as a single term, and it will only match if the field value is an exact match, including case.

    Check the mapping of the AccountId:

    GET /MY_INDEX_HERE/_mapping/field/AccountId
    

    If the type of the field is text or keyword, Adjust your query to use the exact case and value of the field.

    Alternatively, you can use a match_phrase query instead of the terms query to match the exact phrase of the AccountId field, regardless of the case.

    GET /MY_INDEX_HERE/_search
    {
      "query": {
        "match_phrase": {
          "AccountId": "bc73afda-d4f2"
        }
      }
    }