У меня есть 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"
}
}
}
Я видел ваш первый пост (который был удален в конце), и я до сих пор не понимаю, что вы пытаетесь сделать. Вероятно, вы видели синтаксис на сайте es о 'function_score', и это не должно удивлять вас ошибкой, которую вы получаете. Что именно вы пытаетесь сделать с вашими данными и этим вопросом? –
@AndreiStefan, я пытаюсь искать документы с помощью запроса bool, но различный импульс для типов документов. – Ramin
Нет, объясните реальные данные. «У меня есть доктора, статьи и места, и я хочу ...» –