默认情况下,我的过滤器映射如下所示
{
"indexName" : {
"mappings" : {
".percolator" : {
"_id" : {
"index" : "not_analyzed"
},
"properties" : {
"query" : {
"type" : "object",
"enabled" : false
}
}
}
}
假设我将要渗透的文件包含' name'包含下划线的字段
类似
{
name : "null_value"
}
并假设存储在过滤器中的查询类似于
{
"query":
{"query_string":
{"query":"name:\"null\"","defaultOperator":"AND"}
}
percolator返回此查询,表示此文档与此查询匹配。
但我希望过滤器检查该字段是否具有即将到来的文件的确切值。
所以如果名字:" null_value"然后它不应该匹配,但名称:" null"那么它应该匹配。
在这种情况下,我是否必须将映射属性放入过滤器?或者我必须使用不同的查询?
答案 0 :(得分:1)
如果你想拥有精确的令牌匹配语义,你需要为" name"选择合适的分析器。领域。如果您没有指定映射,则会获得默认分析器。相反,你应该使用not_analyzed。
然后在搜索方面,您会想要使用术语查询。 query_string有问题,因为它在通过文本分析管道之前传递给查询解析器。
注意,上述方法区分大小写。如果要忽略大小写,请使用关键字标记生成器和小写标记过滤器创建自定义分析器。然后在查询端使用术语查询,但事先使用小写,因为不分析术语查询。
最好的问候