2015-03-13 5 views
0

Я сделал приложение с elasticsearch, и все работает отлично, кроме поиска с использованием php curl; погрешность нижеПоиск в elasticsearch с использованием php curl

[match] query parsed in simplified form, with direct field name, but included more options than just the field name, possibly use its 'options' form, with 'query' element?] 

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

Когда я делаю некоторые изменения, я обнаружил, что это происходит с помощью POST.

Я использую следующий код для запуска PHP локон и попробовал метод GET слишком

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_TIMEOUT, 200); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, strtoupper($method)); 
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($params)); 
$response = curl_exec($ch); 
curl_close ($ch); 

и запрос

{"query":{"filtered":{"query":{"bool":{"should":[{"bool":{"should":[{"match_phrase":{"name":"india"}}],"boost":16}},{"bool":{"should":[{"match_phrase":{"description":"india"}}],"boost":8}},{"bool":{"should":[{"match":{"name":{"query":"india","analyzer":"standard"}}},{"match":{"description":{"query":"india","analyzer":"standard"}}}],"boost":4}},{"match":{"name.ngram":[{"query":"india","analyzer":"standard"}]}},{"match":{"description":[{"query":"india","analyzer":"standard"}]}},{"match":{"name.ngram":[{"query":"india","analyzer":"standard","fuzziness":"auto"}]}},{"match":{"description":[{"query":"india","analyzer":"standard","fuzziness":"auto"}]}}],"boost":2}},"filter":{"and":[{"terms":{"type":["book"]}},{"range":{"price":{"from":"1","to":"100"}}}]}}},"from":0,"size":20,"filter":{"and":[]},"sort":[{"popularity":{"order":"desc","missing":"_last"}}]} 
+1

Что ваш запрос? То есть что вы передаете как '$ params'? –

+0

@king_nak Я обновил вопрос; пожалуйста, найдите запрос – Dau

ответ

1

Я нашел решение; ниже правильное значение json

{"query":{"filtered":{"query":{"bool":{"should":[{"bool":{"should":[{"match_phrase":{"name":"india"}}],"boost":16}},{"bool":{"should":[{"match_phrase":{"description":"india"}}],"boost":8}},{"bool":{"should":[{"match":{"name":{"query":"india","analyzer":"standard"}}},{"match":{"description":{"query":"india","analyzer":"standard"}}}],"boost":4}},{"match":{"name.ngram":{"query":"india","analyzer":"standard"}}},{"match":{"description":{"query":"india","analyzer":"standard"}}},{"match":{"name.ngram":{"query":"india","analyzer":"standard","fuzziness":"auto"}}},{"match":{"description":{"query":"india","analyzer":"standard","fuzziness":"auto"}}}],"boost":2}},"filter":[]}},"from":0,"size":20,"sort":[{"popularity":{"order":"desc","missing":"_last"}}]} 

проблема находится в фазе запроса соответствия; Я добавлял параметры в запрос соответствия в виде вложенного массива.

Теперь я удалил вложенный массив и добавить параметры в фазе запроса матча в качестве последовательного массива

Спасибо, ребят за сотрудничество OPRATION

1

Проблема может быть в использовании пустых фильтров в вашем запрос dsl.

"filter": { 
    "and":[] 
} 

Попробуйте без пустых фильтров. Также фильтры верхнего уровня переименовываются в версию Elasticsearch 1.0 +.

Update Query DSL:

{ 
    "query": { 
     "filtered": { 
     "query": { 
      "bool": { 
       "should": [ 
        { 
        "bool": { 
         "should": [ 
          { 
           "match_phrase": { 
           "name": "india" 
           } 
          } 
         ], 
         "boost": 16 
        } 
        }, 
        { 
        "bool": { 
         "should": [ 
          { 
           "match_phrase": { 
           "description": "india" 
           } 
          } 
         ], 
         "boost": 8 
        } 
        }, 
        { 
        "bool": { 
         "should": [ 
          { 
           "match": { 
           "name": { 
            "query": "india", 
            "analyzer": "standard" 
           } 
           } 
          }, 
          { 
           "match": { 
           "description": { 
            "query": "india", 
            "analyzer": "standard" 
           } 
           } 
          } 
         ], 
         "boost": 4 
        } 
        }, 
        { 
        "match": { 
         "name.ngram": [ 
          { 
           "query": "india", 
           "analyzer": "standard" 
          } 
         ] 
        } 
        }, 
        { 
        "match": { 
         "description": [ 
          { 
           "query": "india", 
           "analyzer": "standard" 
          } 
         ] 
        } 
        }, 
        { 
        "match": { 
         "name.ngram": [ 
          { 
           "query": "india", 
           "analyzer": "standard", 
           "fuzziness": "auto" 
          } 
         ] 
        } 
        }, 
        { 
        "match": { 
         "description": [ 
          { 
           "query": "india", 
           "analyzer": "standard", 
           "fuzziness": "auto" 
          } 
         ] 
        } 
        } 
       ], 
       "boost": 2 
      } 
     }, 
     "filter": { 
      "and": [ 
       { 
        "terms": { 
        "type": [ 
         "book" 
        ] 
        } 
       }, 
       { 
        "range": { 
        "price": { 
         "from": "1", 
         "to": "100" 
        } 
        } 
       } 
      ] 
     } 
     } 
    }, 
    "from": 0, 
    "size": 20, 
    "sort": [ 
     { 
     "popularity": { 
      "order": "desc", 
      "missing": "_last" 
     } 
     } 
    ] 
} 
+0

Я обновил запрос, указанный вами, а также дал ту же ошибку – Dau