for example, I got three items like: 
{"arr":["a", "b", "c"]}, 
{"arr":["a", "b"]}, 
{"arr":["a",  "c"]}
my search like this:
"query":{ 
"bool":{ 
"must":[ 
{ 
"term":{ 
"arr":{ 
"value":"a" 
} 
} 
}, 
{ 
"term":{ 
"arr":{ 
"value":"b" 
} 
} 
} 
], 
"minimum_should_match": 2 
} 
},
I just want to get ['a', 'b'] but also get ['a', 'b', 'c']. 
I google a lot , but cannot find a way to solve this. 
Is elasticsearch has this ability to do this?
             
            
               
               
               
            
            
           
          
            
              
                abdon  
                (Abdon Pijpelink)
               
              
                  
                    November 1, 2019, 10:46am
                   
                   
              2 
               
             
            
              Take a look at the terms set query  - it does exactly what you're looking for.
It allows you to define - per document - how many terms need to match. You can do that dynamically, per document, using a script .
For example, given this index and these documents:
PUT /my_index
{
  "mappings": {
    "properties": {
      "arr": {
        "type": "keyword"
      }
    }
  }
}
PUT my_index/_doc/1
{
  "arr": [
    "a",
    "b",
    "c"
  ]
}
PUT my_index/_doc/2
{
  "arr": [
    "a",
    "b"
  ]
}
PUT my_index/_doc/3
{
  "arr": [
    "a",
    "c"
  ]
}
 
You can use the following terms set query to only match document 2:
GET /my_index/_search
{
  "query": {
    "terms_set": {
      "arr": {
        "terms": [
          "a",
          "b"
        ],
        "minimum_should_match_script": {
          "source": "Math.max(params.num_terms, doc['arr'].size())"
        }
      }
    }
  }
}
 
             
            
               
               
               
            
            
           
          
            
              
                system  
                (system)
                  Closed 
               
              
                  
                    November 29, 2019, 10:46am
                   
                   
              3 
               
             
            
              This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.