2017-02-02 1 views
0

У меня есть одно поле, содержащее 2-3 элемента в одной строке. предположим, что поле является:И оператор не возвращает никаких результатов в поисковый скрипт

 "target" : "one two three" 

Теперь ниже мой сценарий:

 { 
      "script": { 
      "script": { 
       "inline": "doc['target'].value != null && (doc['target'].value.contains('one') || doc['target'].value.contains('two'))" 
      } 
      } 
     } 

Я получаю правильный результат с выше сценария Теперь, если я хочу, чтобы получить эти записи, в которых целевое поле имеет оба элемента - «один» и «два», поэтому я написал ниже сценарий, просто изменив оператор на AND (& &).

 { 
      "script": { 
      "script": { 
       "inline": "doc['target'].value != null && (doc['target'].value.contains('one') && doc['target'].value.contains('two'))" 
      } 
      } 
     } 

Но теперь, я не получаю результатов. Я не понимаю, в чем проблема. Пожалуйста помоги.

+0

Не эксперт Поиск резинок, но я думаю, что это должно работать, как вы описываете. Но вы, вероятно, можете оставить круглые скобки после первого &&. – user152468

+0

Я также попытался удалить дополнительную скобку, но не получил ожидаемого ответа. – pbajpai21

ответ

0

Что делать, если вы нарушите ваше заявление на два:

{ 
    "script": { 
     "script": { 
      "inline": "doc['target'].value != null && (doc['target'].value.contains('one'); doc['target'].value != null && doc['target'].value.contains('two'))" 
     } 
    } 
} 
+0

Я пробовал этот подход, но его работа как OR, :( – pbajpai21