我已经弄清楚如何使用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'
答案 0 :(得分:1)
bool
boosting
查询的组合怎么样,其中第一个匹配关于满期的10x提升因子,另一个匹配ngram术语与标准提升因子?