elasticsearch 词干提取后还可以进行文字搜索吗?

pb3s4cty  于 2023-04-05  发布在  ElasticSearch
关注(0)|答案(1)|浏览(140)

我是ElasticSearch的新手,我似乎找不到这个问题的答案。
porter_stem添加到索引分析器后,我可以(显然)不再像我以前那样使用match_phrase来获得文字术语序列。例如,搜索**“playing my piano”以前会产生实际上与短语精确匹配的结果,但现在它们还包括“play my piano”“plays my piano”这样的结果。更精确的匹配不被赋予更高的相关性分数。
我的问题是,这只是一个不可避免的,你不能同时有词干和文字搜索,或者有一些解决方案,我只是不知道?是以下任何一种可能:
1.执行文字搜索,其中只有
“playing my piano”匹配,没有其他匹配
1.执行搜索,其中
“playing my piano”优先于其他模糊结果,如“play my piano”“plays my piano”**

3mpgtkmj

3mpgtkmj1#

很好的问题,是的,可以同时按exact matchpartial matchfuzzy match查询和排序,并按匹配分数排序。我建议您为您的用例使用多个字段和不同的分析器。下面是一个示例。

PUT test_multiple_analyzers
{
  "mappings": {
    "properties": {
      "field_name": {
        "type": "text",
        "analyzer": "standard",
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 256
          },
          "porter_stem": {
            "type": "text",
            "analyzer": "my_porter_stem_analyzer"
          }
        }
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {<put your analyzer in here>}
    }
  }
}

GET test_multiple_analyzers/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match_phrase": {
            "field_name.keyword": "plays my piano",
            "boost": 2
          }
        },
        {
          "multi_match": {
            "query": "plays my piano",
            "fields": [
              "field_name.porter_stem^3",
              "field_name"
            ]
          }
        }
      ]
    }
  }
}


bool query:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html

相关问题