默认情况下,我的过滤器映射如下
{
"indexName" : {
"mappings" : {
".percolator" : {
"_id" : {
"index" : "not_analyzed"
},
"properties" : {
"query" : {
"type" : "object",
"enabled" : false
}
}
}
}
假设我将渗透的文档包含“名称”字段,其中包含下划线
就像是
{
name : "null_value"
}
并假设存储在渗滤器中的查询类似于
{
"query":
{"query_string":
{"query":"name:\"null\"","defaultOperator":"AND"}
}
过滤器返回此查询,表示此文档与该查询匹配。
但我希望过滤器检查该字段是否具有即将到来的文档的确切值。
因此,如果名称:“null_value”则不应匹配,但名称:“null”则应匹配。
在这种情况下,是否必须将映射属性放到渗滤器上?还是我必须使用其他查询?
最佳答案
如果要具有完全的 token 匹配语义,则需要为“名称”字段选择适当的分析器。如果未指定映射,则将获得默认的分析器。相反,您应该使用not_analyzed。
然后在搜索方面,您将要使用术语查询。 query_string存在问题,因为它在通过文本分析管道之前已传递给查询解析器。
注意,以上方法区分大小写。如果要忽略大小写,请创建带有关键字标记器和小写标记过滤器的自定义分析器。然后在查询端使用术语查询,但要事先使用小写字母,因为不会分析术语查询。
最好的祝福
关于elasticsearch - Elasticsearch渗透器的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24007823/