我的索引中有这些数据
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个,其中两个名字是弗兰兹和弗朗西斯。我希望这两个也因为它包含在数据中。由于某种原因,它不起作用。
当我执行时:
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
进行编码答案 0 :(得分: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 ”,因此令牌可以包含空格。