2014-11-28 3 views
0

У меня есть 3 типа данных [doctor, article, place], которые я хочу сопоставить их документы на основе запроса bool. но я хочу дать доктору тип повышение 3, место типа повышение 2 и статья повышение 1. У меня есть запрос поиска, который использует function_score и bool query для соответствия документам. но проблема заключается в том, что он выдает исключение, которое говорит No function with the name [bool] is registered.. Вот мой запрос:Как использовать bool Запрос с функцией_score в Elasticsearch?

GET /my_index/doctor,article,place/_search 
{ 
    "query": { 
     "function_score": { 
      "bool": { 
       "should": 
       [ 
        { 
         "common": { 
         "title": { 
          "query":"$q", 
          "cutoff_frequency": 0.001, 
          "low_freq_operator": "and" 
          } 
         } 
        }, 
        { 
         "prefix": { 
          "title": "$q" 
          } 

        }, 
        { 
         "match_phrase_prefix" : { 
          "title" : { 
           "query": "$q", 
           "slop": 10 
          } 
         } 
        } 
       ] 
      }, 
      "functions":[ 
       { 
        "filter":{ 
         "type":{ 
          "value":"doctor" 
         } 
        }, 
        "weight":3 
       }, 
       { 
        "filter":{ 
         "type":{ 
          "value":"place" 
         } 
        }, 
        "weight":2 
       }, 
       { 
        "filter":{ 
         "type":{ 
          "value":"article" 
         } 
        }, 
        "weight":1 
       } 
      ], 
      "score_mode":"first", 
      "boost_mode":"multiply" 
     } 
    } 
} 

благодарит за вашу помощь.

EDIT:

ОШИБКА:

{ 
    "error": "SearchPhaseExecutionException[Failed to execute phase [query], all shards failed; 
      shardFailures {[fWqkaeoLSva_QwhrYHnG3A][darmanjoo][0]: 
      SearchParseException[[darmanjoo][0]: from[-1],size[-1]: 
       Parse Failure [Failed to parse source [ 
       { 
        "query": { 
        "function_score": { 
         "query": { 
         "bool": { 
          "should": [ 
          { 
           "common": { 
           "title": { 
            "query": "دکتر", 
            "cutoff_frequency": 0.001, 
            "low_freq_operator": "and" 
           } 
           } 
          }, 
          { 
           "prefix": { 
           "title": "دکتر" 
           } 
          }, 
          { 
           "match_phrase_prefix": { 
           "title": { 
            "query": "دکتر", 
            "slop": 10 
           } 
           } 
          } 
          ] 
         } 
         }, 
         "functions": [ 
         { 
          "filter": { 
          "type": { 
           "value": "doctor" 
          } 
          }, 
          "weight": 3 
         }, 
         { 
          "filter": { 
          "type": { 
           "value": "place" 
          } 
          }, 
          "weight": 2 
         }, 
         { 
          "filter": { 
          "type": { 
           "value": "article" 
          } 
          }, 
          "weight": 1 
         } 
         ], 
         "score_mode": "first", 
         "boost_mode": "multiply" 
        } 
        } 
       } 
       ]]]; 
      nested: QueryParsingException[[darmanjoo] No function with the name [weight] is registered.]; }{[fWqkaeoLSva_QwhrYHnG3A][darmanjoo][1]: 
      SearchParseException[[darmanjoo][1]: from[-1],size[-1]: 
       Parse Failure [Failed to parse source [ 
       { 
        "query": { 
        "function_score": { 
         "query": { 
         "bool": { 
          "should": [ 
          { 
           "common": { 
           "title": { 
            "query": "دکتر", 
            "cutoff_frequency": 0.001, 
            "low_freq_operator": "and" 
           } 
           } 
          }, 
          { 
           "prefix": { 
           "title": "دکتر" 
           } 
          }, 
          { 
           "match_phrase_prefix": { 
           "title": { 
            "query": "دکتر", 
            "slop": 10 
           } 
           } 
          } 
          ] 
         } 
         }, 
         "functions": [ 
         { 
          "filter": { 
          "type": { 
           "value": "doctor" 
          } 
          }, 
          "weight": 3 
         }, 
         { 
          "filter": { 
          "type": { 
           "value": "place" 
          } 
          }, 
          "weight": 2 
         }, 
         { 
          "filter": { 
          "type": { 
           "value": "article" 
          } 
          }, 
          "weight": 1 
         } 
         ], 
         "score_mode": "first", 
         "boost_mode": "multiply" 
        } 
        } 
       } 
       ]]]; 
      nested: QueryParsingException[[darmanjoo] No function with the name [weight] is registered.]; }{[fWqkaeoLSva_QwhrYHnG3A][darmanjoo][4]: 
      SearchParseException[[darmanjoo][4]: from[-1],size[-1]: 
       Parse Failure [Failed to parse source [ 
       { 
        "query": { 
        "function_score": { 
         "query": { 
         "bool": { 
          "should": [ 
          { 
           "common": { 
           "title": { 
            "query": "دکتر", 
            "cutoff_frequency": 0.001, 
            "low_freq_operator": "and" 
           } 
           } 
          }, 
          { 
           "prefix": { 
           "title": "دکتر" 
           } 
          }, 
          { 
           "match_phrase_prefix": { 
           "title": { 
            "query": "دکتر", 
            "slop": 10 
           } 
           } 
          } 
          ] 
         } 
         }, 
         "functions": [ 
         { 
          "filter": { 
          "type": { 
           "value": "doctor" 
          } 
          }, 
          "weight": 3 
         }, 
         { 
          "filter": { 
          "type": { 
           "value": "place" 
          } 
          }, 
          "weight": 2 
         }, 
         { 
          "filter": { 
          "type": { 
           "value": "article" 
          } 
          }, 
          "weight": 1 
         } 
         ], 
         "score_mode": "first", 
         "boost_mode": "multiply" 
        } 
        } 
       } 
       ]]]; 
      nested: QueryParsingException[[darmanjoo] No function with the name [weight] is registered.]; }]", 
    "status": 400 
} 

отредактированные QUERY ПРЯМОЙ СКОПИРОВАНЫ ОТ MARVEL СМЫСЛЕ:

GET /darmanjoo/doctor,article,place/_search 
{ 
    "query": { 
     "function_score": { 
      "query": { 
       "bool": { 
        "should": [ 
         { 
          "common": { 
           "title": { 
            "query": "$q", 
            "cutoff_frequency": 0.001, 
            "low_freq_operator": "and" 
           } 
          } 
         }, 
         { 
          "prefix": { 
           "title": "$q" 
          } 
         }, 
         { 
          "match_phrase_prefix": { 
           "title": { 
            "query": "$q", 
            "slop": 10 
           } 
          } 
         } 
        ] 
       } 
      }, 
      "functions": [ 
       { 
        "filter": { 
         "type": { 
          "value": "doctor" 
         } 
        }, 
        "weight": 3 
       }, 
       { 
        "filter": { 
         "type": { 
          "value": "place" 
         } 
        }, 
        "weight": 2 
       }, 
       { 
        "filter": { 
         "type": { 
          "value": "article" 
         } 
        }, 
        "weight": 1 
       } 
      ], 
      "score_mode": "first", 
      "boost_mode": "multiply" 
     } 
    } 
} 
+0

Я видел ваш первый пост (который был удален в конце), и я до сих пор не понимаю, что вы пытаетесь сделать. Вероятно, вы видели синтаксис на сайте es о 'function_score', и это не должно удивлять вас ошибкой, которую вы получаете. Что именно вы пытаетесь сделать с вашими данными и этим вопросом? –

+0

@AndreiStefan, я пытаюсь искать документы с помощью запроса bool, но различный импульс для типов документов. – Ramin

+0

Нет, объясните реальные данные. «У меня есть доктора, статьи и места, и я хочу ...» –

ответ

3

Попробуйте это:

GET /my_index/doctor,article,place/_search 
{ 
    "query": { 
    "function_score": { 
     "query": { 
     "bool": { 
      "should": [ 
      { 
       "common": { 
       "title": { 
        "query": "$q", 
        "cutoff_frequency": 0.001, 
        "low_freq_operator": "and" 
       } 
       } 
      }, 
      { 
       "prefix": { 
       "title": "$q" 
       } 
      }, 
      { 
       "match_phrase_prefix": { 
       "title": { 
        "query": "$q", 
        "slop": 10 
       } 
       } 
      } 
      ] 
     } 
     }, 
     "functions": [ 
     { 
      "filter": { 
      "type": { 
       "value": "doctor" 
      } 
      }, 
      "boost_factor": 3 
     }, 
     { 
      "filter": { 
      "type": { 
       "value": "place" 
      } 
      }, 
      "boost_factor": 2 
     }, 
     { 
      "filter": { 
      "type": { 
       "value": "article" 
      } 
      }, 
      "boost_factor": 1 
     } 
     ], 
     "score_mode": "first", 
     "boost_mode": "multiply" 
    } 
    } 
} 
+0

теперь выдает другое исключение, которое говорит вложенное: QueryParsingException [[my_index] Нет функции с именем [вес].] – Ramin

+0

Этот запрос работал для меня. Убедитесь, что вы правильно скопировали. –

+0

Я проверил тройной запрос. спасибо за вашу попытку, но он дает ошибку в EDIT SECTION of POST – Ramin

 Смежные вопросы

  • Нет связанных вопросов^_^