如何在 elasticsearch 中使用区分大小写的文本查询字符串
how to query strings with incasesensitive the text in elastic search
我在两个字段中查找数据,其中一个字段必须相同,一个使用查询
我有数据
{
"NUMBER" : "5587120",
"SID" : "121213-13131-_X",
"ADDRESS" : "purwakarta"
}
我试过像这样使用查询字符串
GET test/_doc/_search
{
"query" : {
"bool" : {
"must" : [
{"match" : {"NUMBER" : "5587120"}}
],
"filter" : {
"query_string" : {
"default_field" : "SID.keyword",
"query" : "*X*"
}
}
}
}
当我输入与记录相同的文本时,出现了我想要的数据,但是当我输入小写文本时,却没有出现数据
由于您的问题不清楚,您希望根据上下文在哪个字段上进行不区分大小写的搜索,我假设它是 SID.keyword
字段。
为什么您的解决方案不起作用:请注意 keyword 字段在 elasticsearch 中未按原样进行分析和索引,因此 如果您的字段 SID.keyword
您正在提供它的值 121213-13131-_X
因此它将按原样存储,它不会只创建一个与提供的值完全相同的标记。
现在您正在使用 query_string
on-field SID.keyword
,因此您的 query string will use the same analyzer configured for the field which is the keyword analyzer 又是 no-op 分析器,因此不会小写 *X*
在查询中提供。
解决方案 :如果您想要 insensitive
搜索而不是使用 SID.keyword
字段,只需创建一个使用 keyword
分析器,然后将其传递给 lowercase
标记过滤器,因此您的 121213-13131-_X
将被转换为 121213-13131-_x
(注意小写 x
)。然后您的查询字符串也将使用相同的分析器并将匹配文档 ,因为最终 elasticsearch 在标记匹配 上工作。
我在两个字段中查找数据,其中一个字段必须相同,一个使用查询
我有数据
{
"NUMBER" : "5587120",
"SID" : "121213-13131-_X",
"ADDRESS" : "purwakarta"
}
我试过像这样使用查询字符串
GET test/_doc/_search
{
"query" : {
"bool" : {
"must" : [
{"match" : {"NUMBER" : "5587120"}}
],
"filter" : {
"query_string" : {
"default_field" : "SID.keyword",
"query" : "*X*"
}
}
}
}
当我输入与记录相同的文本时,出现了我想要的数据,但是当我输入小写文本时,却没有出现数据
由于您的问题不清楚,您希望根据上下文在哪个字段上进行不区分大小写的搜索,我假设它是 SID.keyword
字段。
为什么您的解决方案不起作用:请注意 keyword 字段在 elasticsearch 中未按原样进行分析和索引,因此 如果您的字段 SID.keyword
您正在提供它的值 121213-13131-_X
因此它将按原样存储,它不会只创建一个与提供的值完全相同的标记。
现在您正在使用 query_string
on-field SID.keyword
,因此您的 query string will use the same analyzer configured for the field which is the keyword analyzer 又是 no-op 分析器,因此不会小写 *X*
在查询中提供。
解决方案 :如果您想要 insensitive
搜索而不是使用 SID.keyword
字段,只需创建一个使用 keyword
分析器,然后将其传递给 lowercase
标记过滤器,因此您的 121213-13131-_X
将被转换为 121213-13131-_x
(注意小写 x
)。然后您的查询字符串也将使用相同的分析器并将匹配文档 ,因为最终 elasticsearch 在标记匹配 上工作。