【问题标题】:Can't get proper result from elasticsearch based on query and document tokenization无法根据查询和文档标记化从弹性搜索中获得正确的结果
【发布时间】:2019-06-13 13:27:12
【问题描述】:

我正在尝试实现一个需要使用 Edge NGRAM Tokenizer 的搜索系统。创建索引的设置如下所示。我对文档和搜索查询都使用了相同的标记器。 (文件为波斯语)

PUT /test
{
  "settings": {
    "analysis": {
      "analyzer": {
        "autocomplete": {
          "tokenizer": "autocomplete",
          "filter": [
            "lowercase"
          ]
        },
        "autocomplete_search": {
          "tokenizer": "autocomplete"
        }
      },
      "tokenizer": {
        "autocomplete": {
          "type": "edge-ngram",
          "min_gram": 2,
          "max_gram": 10,
          "token_chars": [
            "letter"
          ]
        }
      }
    }
  },
  "mappings": {
    "_doc": {
      "properties": {
        "title": {
          "type": "text",
          "analyzer": "autocomplete",
          "search_analyzer": "autocomplete_search"
        }
      }
    }
  }
}

当我在文档中搜索术语“آلمانی”获得 0 次点击(结果)时,问题就出现了,而我有一个包含数据的文档:“آلمان خوب است”。

正如您所见,分析术语“آلمانی”的结果表明它生成了令牌“آلمان”并且工作正常。

{
  "tokens" : [
    {
      "token" : "آ",
      "start_offset" : 0,
      "end_offset" : 6,
      "type" : "<ALPHANUM>",
      "position" : 0
    },
    {
      "token" : "آل",
      "start_offset" : 0,
      "end_offset" : 6,
      "type" : "<ALPHANUM>",
      "position" : 0
    },
    {
      "token" : "آلم",
      "start_offset" : 0,
      "end_offset" : 6,
      "type" : "<ALPHANUM>",
      "position" : 0
    },
    {
      "token" : "آلما",
      "start_offset" : 0,
      "end_offset" : 6,
      "type" : "<ALPHANUM>",
      "position" : 0
    },
    {
      "token" : "آلمان",
      "start_offset" : 0,
      "end_offset" : 6,
      "type" : "<ALPHANUM>",
      "position" : 0
    },
    {
      "token" : "آلمانی",
      "start_offset" : 0,
      "end_offset" : 6,
      "type" : "<ALPHANUM>",
      "position" : 0
    }
  ]
}

如下所示的搜索查询获得 0 次点击。

GET /test/_search
{
  "query": {"match": {
    "title": {"query": "آلمانی" , "operator": "and"}
  }}
}

但是,搜索词“آلما”会返回带有数据“آلمان خوب است”的文档。 我该如何解决这个问题?

非常感谢您的帮助。

【问题讨论】:

    标签: elasticsearch search tokenize n-gram elasticsearch-analyzers


    【解决方案1】:

    我发现 Ricardo Heck 的这篇 DevTicks 帖子解决了我的问题。 enter the link for more detailed description

    我像这样更改了我的映射设置:

        "mappings": {
        "_doc": {
          "properties": {
            "title": {
              "type": "text",
              "analyzer": "autocomplete",
              "search_analyzer": "autocomplete_search",
              "fields": {
                "ngram": {
                  "type": "text",
                  "analyzer": "autocomplete"
                }
              }
            }
          }
        }
      }
    

    现在我通过搜索“آلمانی”一词得到文档“آلمان خوب است”。

    【讨论】:

      猜你喜欢
      • 2019-10-15
      • 1970-01-01
      • 2011-04-25
      • 1970-01-01
      • 1970-01-01
      • 2020-11-10
      • 2020-04-21
      • 2022-08-12
      • 2018-09-29
      相关资源
      最近更新 更多