ElasticSearch function_score throwing parsing_exception - PullRequest
0 голосов
/ 27 апреля 2018

У меня возникли досадные проблемы при попытке заставить function_score работать для поля цены. Первоначально я пытался использовать поле scaled_float. Однако это не понравилось. Поэтому я изменил свое ценовое поле на длинное с отступом для десятичной позиции. Таким образом, у меня есть поле с "15000" для $ 150,00.

Вот мой запрос к / products_v7 / product / _search

    {
   "explain":true,
   "query":{
      "function_score":{
         "query":{
            "bool":{
               "should":[
                  {
                     "match_phrase":{
                        "title":{
                           "query":"test",
                           "slop":10
                        }
                     }
                  }
               ]
            }
         },
         "functions":[
            {
               "gauss":{
                  "price":{
                     "origin":"15000",
                     "scale":"2000"
                  }
               },
               "weight":2
            }
         ]
      }
   }
}

Вот ответ

{
    "error": {
        "root_cause": [
            {
                "type": "parsing_exception",
                "reason": "unknown field [price]",
                "line": 1,
                "col": 0
            }
        ],
        "type": "search_phase_execution_exception",
        "reason": "all shards failed",
        "phase": "query",
        "grouped": true,
        "failed_shards": [
            {
                "shard": 0,
                "index": "products_v7",
                "node": "cd3yjjoSSxKxaJ-vCB8SgQ",
                "reason": {
                    "type": "parsing_exception",
                    "reason": "unknown field [price]",
                    "line": 1,
                    "col": 0
                }
            }
        ]
    },
    "status": 400
}

Отображение для / products_v7 / product / _mapping

{
    "products_v7": {
        "mappings": {
            "product": {
                "properties": {
                    "price:": {
                        "type": "long"
                    },
                    "sku": {
                        "type": "text",
                        "fields": {
                            "keyword": {
                                "type": "keyword",
                                "ignore_above": 256
                            }
                        }
                    },
                    "title": {
                        "type": "text",
                        "fields": {
                            "keyword": {
                                "type": "keyword",
                                "ignore_above": 256
                            }
                        }
                    }
                }
            }
        }
    }
}

Вот данные, которые я вставил в

{
    "took": 2,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 2,
        "max_score": 1,
        "hits": [
            {
                "_index": "products_v7",
                "_type": "product",
                "_id": "cSULBGMBog6d8NyO0gRH",
                "_score": 1,
                "_source": {
                    "sku": "126",
                    "title": "test 4",
                    "price:": 15000
                }
            },
            {
                "_index": "products_v7",
                "_type": "product",
                "_id": "fl0FBGMBog0jN_eMK89-",
                "_score": 1,
                "_source": {
                    "sku": "125",
                    "title": "test 3",
                    "price:": 13000
                }
            }
        ]
    }
}

1 Ответ

0 голосов
/ 27 апреля 2018

Проблема в том, что в вашем документе поле price называется price: (т. Е. У вас есть двоеточие в имени. Эти детали имеют значение.

{
     "sku": "126",
     "title": "test 4",
     "price:": 15000
           ^
           |
        see here
}
...