2013-08-09 5 views
1

Я пытаюсь использовать значение во вложенном объекте для повышения моего ранга на основе метода custom_filters_score. Таким образом, матч не требуется, но если это произойдет, он повысит ранг. Как правило, можно жестко кодировать повышение, но я бы хотел использовать script field на основе значения во вложенном документе, который бы соответствовал.Custom_Filters_Score с вложенным объектом и скриптом

Если я жестко задал значение, скажем 1000, я вижу влияние на счет. Тем не менее, похоже, что ES не может понять смысл популярного ключа, так как он дает ему никакого стимула.

Документов выглядеть так с SEARCH_TERMS быть типом = вложенные, просто два ключа и два значения:

{ 
"name":"colorful light blue things that make developers wild" 
"search_terms":[ 
    { 
     "a_term":"colorful", 
     "popularity":33433 
    }, 
    { 
     "a_term":"light blue", 
     "popularity":343 
    } 
] 
"other_keys":"stuff" 
} 

Вот пример custom_filters_score запрос

{ 
    "query":{ 
     "custom_filters_score":{ 
     --query:{} would be here-- 
     ,"filters":[ 
      { 
       "filter":{ 
        "nested":{ 
         "path":"search_terms" 
         ,"query": { 
          "match": { 
           "a_term": "light blue" 
          } 
         } 
        } 
       }, 
       --here is my problem area 
       "script":"doc['search_terms.popularity'].value" 
       -- this would work, hard coded value 
       "script":"1000"   
      } 
     ] 
    }  
} 

ответ

0

Вы должны получить доступ к вложенным документам поля в то время как итерации над ними. В вашем запросе вы пытаетесь получить доступ к вложенному полю вне вложенного запроса. Попробуйте примерно следующее:

"query": { 
    "nested": { 
     "score_mode": "total", 
     "path": "search_terms", 
     "query": { 
      "function_score": { 
       "query": { 
        "match": { 
         "a_term": "light blue" 
        } 
       }, 
       "script_score": { 
        "script": "doc['search_terms.popularity'].value" 
       }, 
       "boost_mode": "replace" 
      } 
     } 
    } 
} 
Смежные вопросы