elasticsearch评分独特的术语与ngram术语

时间:2014-05-29 21:48:23

标签: elasticsearch nest

我已经弄清楚如何使用ngrams返回部分单词结果的结果。但是现在我想根据术语第一个然后是部分术语来安排(评分或排序)我的结果。

例如,用户在电影数据库中搜索“我们”#39;。我想要我们是马歇尔'和类似的显示在顶部,而不是在西北方向的北方'。 ('我们在'西北')。

目前这是我对此标题字段的映射:

"title": {
  "type": "string",
  "analyzer": "ngramAnalyer",
  "fields": {
     "term": {
        "type": "string",
        "analyzer": "fullTermCaseInsensitive"
     },
     "raw": {
        "type": "string",
        "index": "not_analyzed"
     }
  }
}

我创建了一个多字段,其中ngramAnalyzer是一个自定义ngram,term使用带有标准过滤器的关键字tokenizer,而raw是not_indexed。

我的查询如下:

"query": {
"function_score": {
  "functions": [
    {
      "script_score": {
        "script": "_score * (1+ (1 / doc['salesrank'].value) )"
      }
    }
  ],
  "query": {
    "bool": {
      "must": [
        {
          "match_phrase": {
            "title": {
             "query": "we",
              "max_expansions": 10
            }
          }
        }
      ], 
      "should":{
        "term" : { 
          "title.term" : { 
            "value" : "we", 
            "boost" : 10 
            }
        }
      }
    }
  }
}

我基本上要求必须匹配ngram,并且术语“我们'应该匹配,如果是,请加强它。

当然这不起作用。

任何想法?

修改

进一步增加复杂性...我将如何首先匹配精确的标题,然后是自定义分数?

我已经采取了一些措施,但似乎无法发挥作用。

例如:

input: 'game'
results should be ordered by exact match 'game' 
followed by a custom score based on a sales rank (integer)
so that the next results after 'game' might be something like 'hunger games'

1 个答案:

答案 0 :(得分:1)

bool boosting查询的组合怎么样,其中第一个匹配关于满期的10x提升因子,另一个匹配ngram术语与标准提升因子?