elasticsearch - 在 elasticsearch 中使用空格标记器自动完成。正确标记空格
问题描述
我有一个要自动完成的弹性索引。
因此,我有一个类型的SuggestField,completion
我在其中放置了应该自动完成的文本。
"suggestField" : {
"type" : "completion",
"analyzer" : "IndexAnalyzer",
"search_analyzer" : "SearchAnalyzer",
"preserve_separators" : true,
"preserve_position_increments" : true,
"max_input_length" : 50
},
使用分析仪:
"IndexAnalyzer" : {
"filter" : [
"lowercase",
"stop",
"stopGerman",
"EdgeNGramFilter"
],
"type" : "custom",
"tokenizer" : "MyTokenizer"
},
"SearchAnalyzer" : {
"filter" : [
"lowercase"
],
"type" : "custom",
"tokenizer" : "MyTokenizer"
},
过滤器和分词器:
"filter" : {
"EdgeNGramFilter" : {
"type" : "edge_ngram",
"min_gram" : "1",
"max_gram" : "50"
},
"stopGerman" : {
"type" : "stop",
"stopwords" : "_german_"
}
},
"tokenizer" : {
"MyTokenizer" : {
"type" : "whitespace"
}
}
我现在的问题是,如果我查询该字段,则自动完成仅在我从文本开头开始时才有效,而不是针对每个单词。
例如,我的建议字段中有一个值,如下所示: "123-456-789 thisisatest"
如果我搜索我的建议字段,123-
我会得到该值作为结果。但是,如果我搜索thisis
id 不会得到结果。这是我的查询。
POST myindex/_search?typed_keys=true
{
"suggest": {
"completion-term": {
"completion" : {
"field" : "suggestField"
} ,
"prefix" : "thisis"
}
}
}
问题:如果我搜索,我如何必须更改上述设置才能获得给定的值thisis
?
仅供参考:如果我在 kibana 中使用 IndexAnalyzer 进行_analyze
查询,123-456-789 thisisatest
我会得到(从我的角度来看是正确的)令牌:
1
12
123
123-
123-4
123-45
123-456
123-456-7
123-456-78
123-456-789
t
th
thi
this
thisi
thisis
thisisa
thisisat
thisisate
thisisates
thisisatest
解决方案
推荐阅读
- sql - 配置 SQL PolyBase 以访问 MongoDB 中的外部数据 - 问题
- node.js - Docker 容器正在运行,但其进程已完成
- node.js - 即使调用页面也不会呈现
- filenet-p8 - Filenet - 在 Filenet 工作流中获取当前日期和时间
- autodesk-forge - Autodesk Viewer - 未来对 viewer.impl 多模型方法的期望
- javascript - 无法在订阅内触发点击事件
- java - Liberty Web 应用程序 ViewExpiredException - 找不到视图标识符的已保存视图状态
- java - 自定义滚动视图在引用 xml 文件行时因错误膨胀类而崩溃
- reactjs - 节点快速会话反应:服务器cookie未发送到客户端
- google-chrome - “内容下载”在 Chrome 中非常慢,而不是在隐身或其他浏览器中