Regexp Filter Boost

时间:2015-01-19 17:15:27

标签: elasticsearch

我正在试图弄清楚是否有可能根据正则表达式提升命中率。例如,使用用户名搜索记录,我想提升那些以查询开头的记录。我尝试了类似下面的查询,但它不像我想的那样工作:

{
  "query": {
    "function_score": {
      "functions": [
        {
          "boost_factor": 2,
          "filter": {
            "regexp": {
              "name_not_analyzed": "^frank.*"
            }
          }
        }
      ],
      "score_mode": "multiply",
      "query": {
        "bool": {
          "must": [
            {
              "query_string": {
                "query": "frank",
                "default_operator": "AND"
              }
            },
            {
              "term": {
                "site_id": {
                  "term": 1
                }
              }
            }
          ]
        }
      }
    }
  }
}

这可能吗?如果是这样,怎么样?谢谢!

1 个答案:

答案 0 :(得分:0)

这似乎给了我想要的结果:

{
  "query": {
    "bool": {
      "must": [
        {
          "query_string": {
            "query": "frank",
            "default_operator": "AND"
          }
        },
        {
          "term": {
            "site_id": {
              "term": 1
            }
          }
        }
      ],
      "should": [
        {
          "match_phrase_prefix": {
            "name": {
              "query": "frank",
              "max_expansions": 5
            }
          }
        }
      ]
    }
  }
}

按照http://www.elasticsearch.org/blog/starts-with-phrase-matching/

中的说明使用分析仪时