我如何获得Elasticsearch为匹配顺序的令牌字符串分配更高的分数?

问题描述 投票:0回答:1

我正在建立一个搜索数据库。大多数条目都是专有名词(名称和街道地址)。我设置了一个ngram令牌过滤器来帮助快速模糊搜索。它运作良好。但是,如果我搜索“约翰·艾伦”,则结果包括得分相同(即相关性排名)的“约翰·艾伦”和“约翰·艾伦”。当我搜索“约翰·艾伦”时,如何调整索引设置或查询语法以使弹性仍然返回两个文档,但是给“约翰·艾伦”分配的得分要比“约翰·艾伦·约翰”的得分高?]

这里是索引设置...

  {
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "filter": [
            "lowercase"
          ],
          "type": "custom",
          "tokenizer": "my_tokenizer"
        }
      },
      "tokenizer": {
        "my_tokenizer": {
          "token_chars": [
            "letter",
            "digit",
            "custom"
          ],
          "custom_token_chars": "'-",
          "min_gram": "3",
          "type": "ngram",
          "max_gram": "4"
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "full_name": {
        "type": "text",
        "analyzer": "my_analyzer",
        "fields": {
          "keyword": {
            "type": "keyword"
          }
        }
      }
    }
  }
}

这是示例查询...

{
    "query": {
        "query_string": {
            "query": "Allen John",
            "fields": [
                "full_name"
            ]
        }
    }
}

[其他说明:

  1. 我们不使用通配符,因为它们会使查询变慢。
  2. 我们的典型索引将具有1000万个文档或更少。
  3. 速度至关重要,就像在大多数Elasticsearch应用程序中一样。
  4. 根据目前为止我所读的内容,答案或答案提示可能是在Elasticsearch的边缘n-gram标记化技术或elasticsearch的完成提示器中。也许不是。
elasticsearch n-gram relevance
1个回答
0
投票

我们可以再添加一个使用标准分析器的字段,如果查询字符串与该字段匹配,那么我们可以使用更高的值进行增强,如果不匹配,则通过ngram分析器获得匹配的分数。

"mappings": {
    "properties": {
      "full_name": {
        "type": "text",
        "analyzer": "my_analyzer",
        "fields": {
          "keyword": {
            "type": "keyword"
          },
          "standard" :{
            "type": "text" //this field uses default standard analyzer
          }
        }
      }
    }

搜索查询应更改为包括两个字段,其中两个字段具有更高的提升值。

{
    "query": {
        "query_string": {
            "query": "Allen John",
            "fields": [
                "full_name", "full_name.standard^2"
            ]
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.