Проверьте значение в массиве params, используя безболезненный скрипт ElasticSearch - PullRequest
0 голосов
/ 26 ноября 2018

Я новичок в ElasticSearch.Я работаю над проектом, где мне нужно искать списки, которые соответствуют вводу http://foo.bar/search?listing=123,456.Я построил массив, ключ и значение которого совпадают и представляют идентификаторы листинга.Я попытался запустить следующий пример, но он не удалось около содержит.Сценарий построен для безболезненного языка.Тем не менее, я всегда получаю ошибку во время выполнения.

Я не могу заставить это работать, что я могу делать не так?

 'function_score' => [
       'query' => $query,
           'score_mode' => 'sum',
              'functions' => [[
                'script_score' => [
                 'script' => [
                   'params' => ['listing' => [123 => 123, 456 => 456]],
    'source' => "(params.listing.contains(doc['id'].value) ? Math.pow(3, 3) : 0)",
                            ],
                        ],
                    ]],
                ],

1 Ответ

0 голосов
/ 26 ноября 2018

Вы можете использовать приведенный ниже запрос.Вы можете проверить часть script как то, что вам нужно, было реализовано.

POST <your_index_name>/_search
{
  "query": {
    "function_score": {
      "score_mode": "sum", 
      "query": {
        "match_all": {}
      },
      "functions": [
        {
          "script_score": {
            "script": {
              "source": """
                  boolean allValues = false;
                  for(int i=0; i<params.value.size(); i++){
                    if(doc['id'].value.contains(params.value.get(i))){
                      allValues = true;
                    }else{
                      allValues = false;
                      break;
                    }
                  } 
                  if(allValues){
                    return Math.pow(3,3)
                  } else {
                    return 0;
                  }
                """,
              "params":{
                "value": ["123","456"]
              }
            }
          }
        }
      ]
    }
  }
}

Что делает запрос, он проверяет, присутствуют ли все значения, присутствующие в параметрах, например, 123 & 456 присутствует в поле id, если это так, он будет идти вперед и вычислять оценкусоответственно.

Не то, чтобы поле id было keyword, когда я тестировал запрос на моем конце.

Вы можете использовать запрос соответствующим образом в своем php-скрипте.Дайте мне знать, если это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...