使用ngram的elasticsearch查询问题
我的索引中有这些数据 如果您注意到在映射中im使用ngram从3个令牌到20个令牌 执行此查询时:使用ngram的elasticsearch查询问题,search,
elasticsearch,sense,Search,
elasticsearch,Sense,我的索引中有这些数据 如果您注意到在映射中im使用ngram从3个令牌到20个令牌 执行此查询时: GET /my_index/user/_search?search_type=dfs_query_then_fetch { "query": { "filtered": { "query":{ "multi_match":{ "query": "F", "fields": ["username","firstnam
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,我会得到所有文档,但我认为这会影响查询的性能
我错过了什么。提前谢谢
注意:所有示例都是用sense编码的,这是预期的,因为最小值被指定为3。这意味着自定义分析器生成的令牌的最小长度是3个代码点 因此,“弗兰兹·席尔瓦”的第一个标志是“Fra”。 因此,标记“F”与此文档不匹配 可以使用以下方法测试分析仪生成的令牌:
curl -Xget "http://<server>/index_name/_analyze?analyzer=custom_analyzer&text=Franz Silva"
curl-Xget”http:///index_name/_analyze?analyzer=custom_analyzer&text=Franz 席尔瓦“
另外请注意,由于上面指定的“custom_analyzer”没有指定“token_chars”,因此标记可以包含空格。如果我将ngram大小从1更改为20,例如,它将显示更多数据,因为几乎所有文档中都会出现每一个字母,那么我可以构建哪些解决方案来解决这个问题?