我试图在elasticsearch中使用percolation函数.它工作得很好,但开箱即用,没有词干来处理单数/复数等.这个主题的文档相当薄,所以我想知道是否有人有这个工作,需要什么设置.目前我没有索引我的文档,因为我没有搜索它们,只是将它们传递给过滤器以触发通知.
您可以使用percolate API在不对其进行索引的情况下针对过滤器测试文档.然而,该percolateAPI需要和index和type为您的文档.这样它就可以知道如何定义(或映射)文档中的每个字段.
分析器属于索引,映射/类型定义中的字段可以使用全局定义的分析器,也可以使用为索引定义的自定义分析器.
例如,我们可以使用全局定义的分析器为index test,type 定义映射,test如下所示:
curl -XPUT 'http://127.0.0.1:9200/test/?pretty=1' -d '
{
"mappings" : {
"test" : {
"properties" : {
"title" : {
"type" : "string",
"analyzer" : "english"
}
}
}
}
}
'
Run Code Online (Sandbox Code Playgroud)
或者,您可以设置仅属于test索引的自定义分析器:
curl -XPUT 'http://127.0.0.1:9200/test/?pretty=1' -d '
{
"mappings" : {
"test" : {
"properties" : {
"title" : {
"type" : "string",
"analyzer" : "my_english"
}
}
}
},
"settings" : {
"analysis" : {
"analyzer" : {
"my_english" : {
"stopwords" : [],
"type" : "english"
}
}
}
}
}
'
Run Code Online (Sandbox Code Playgroud)
现在我们可以创建我们的过滤器,指定它所属的索引:
curl -XPUT 'http://127.0.0.1:9200/_percolator/test/english?pretty=1' -d '
{
"query" : {
"match" : {
"title" : "singular"
}
}
}
'
Run Code Online (Sandbox Code Playgroud)
并使用percolateAPI 测试它,再次指定索引和类型:
curl -XGET 'http://127.0.0.1:9200/test/test/_percolate?pretty=1' -d '
{
"doc" : {
"title" : "singulars"
}
}
'
# {
# "ok" : true,
# "matches" : [
# "english"
# ]
# }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1025 次 |
| 最近记录: |