0

我的索引中有这些数据

https://gist.github.com/bitgandtter/6794d9b48ae914a3ac7c

如果您在映射中注意到 im 使用从 3 个令牌到 20 个的 ngram。

当我执行此查询时:

GET /my_index/user/_search?search_type=dfs_query_then_fetch
{
  "query": {
    "filtered": { 
      "query":{
        "multi_match":{
          "query": "F",
          "fields": ["username","firstname","middlename","lastname"],
          "analyzer": "custom_search_analyzer"
        }
      }
    }
  }
}

我应该得到我已经索引的 8 个文档,但我只得到 6 个,其中两个名字是 Franz 和 Francis。我希望这两个也有,因为 f 它包含在数据中。由于某种原因,它不起作用。

当我执行:

GET /my_index/user/_search?search_type=dfs_query_then_fetch
{
  "query": {
    "filtered": { 
      "query":{
        "multi_match":{
          "query": "Fran",
          "fields": ["username","firstname","middlename","lastname"],
          "analyzer": "custom_search_analyzer"
        }
      }
    }
  }
}

我得到那两个文件。

如果我将 ngram 降低到从 1 开始,我会得到所有文档,但我认为这会影响查询的性能。

我在这里缺少什么。提前致谢。

注意:所有示例都是使用意义编码的

4

1 回答 1

0

这是意料之中的,因为 min_gram 被指定为 3,这意味着自定义分析器生成的令牌的最小长度是 3 个代码点。

因此,“Franz Silva”的第一个标记将是“Fra”。因此,令牌“F”将与此文档不匹配。

可以使用以下方法测试分析器生成的令牌:

curl -Xget "http://<server>/index_name/_analyze?analyzer=custom_analyzer&text=Franz Silva"

另请注意,由于上面指定的“ custom_analyzer ”未指定“ token_chars ”,因此标记可以包含空格。

于 2015-04-15T14:42:56.807 回答