2014-04-30 56 views
0

給定一個elasticsearch文件是這樣的:elasticsearch選擇哪些領域使用了升壓


{ 
    "name": "bob", 
    "title": "long text", 
    "text": "long text bla bla...", 
    "val_a1": 0.3, 
    "val_a2": 0.7, 
    "val_a3": 1.1, 
    ... 
    "val_az": 0.65 
} 

我需要在Elastisearch搜索與文本字段給定的增加值加上文件升壓值從命名了字段val_xy
在示例中,搜索可能是:
"long"與文本提升值:2.0和通用升壓val_a6

所以,如果發現文本字段"long"我用2.0的提升,並使用從字段值的提升值val_a6

如何在java Elasticsearch客戶端上執行此搜索?這是可能的?

+0

你想通過'val'和'**'每個**結果來增加任何**匹配**的val_a6浮點數嗎? – Sam

回答

2

你想要的是一個function_score查詢。文檔不是最好的,可能會非常混亂。但是,使用你上面的例子,你會做類似如下:

"function_score": { 
    "query": { 
     "term": { 
      "title": "long" 
     } 
    }, 
    "functions": [ 
     { 
      "filter": { 
       "term": { 
        "title": "long" 
       } 
      }, 
      "script_score": { 
       "script": "_score*2.0*doc['val_a6'].value" 
      } 
     } 
    ], 
    "score_mode": "max", 
    "boost_mode": "replace" 
} 

我靈光一現用function_score查詢是搞清楚你可以做濾鏡,包括布爾過濾器「功能」部分中。