ngram 的 elasticsearch 查询问题
elasticsearch query issue with ngram
我的索引中有这些数据
https://gist.github.com/bitgandtter/6794d9b48ae914a3ac7c
如果您注意到我在映射中使用了从 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。我希望有这两个,因为它包含在数据中。由于某种原因,它不起作用。
当我执行时:
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 开始,我会得到所有文档,但我认为这会影响查询的性能。
我在这里缺少什么。提前致谢。
注意:所有示例均使用 sense
编码
这是预期的,因为 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”,因此标记可以包含空格。
我的索引中有这些数据
https://gist.github.com/bitgandtter/6794d9b48ae914a3ac7c
如果您注意到我在映射中使用了从 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。我希望有这两个,因为它包含在数据中。由于某种原因,它不起作用。
当我执行时:
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 开始,我会得到所有文档,但我认为这会影响查询的性能。
我在这里缺少什么。提前致谢。
注意:所有示例均使用 sense
编码这是预期的,因为 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”,因此标记可以包含空格。