elasticsearch Elasticsearch不区分搜索项,elasticsearch,elasticsearch" /> elasticsearch Elasticsearch不区分搜索项,elasticsearch,elasticsearch" />

elasticsearch Elasticsearch不区分搜索项

elasticsearch Elasticsearch不区分搜索项,elasticsearch,elasticsearch,我有下一个要搜索的查询 { "query":{ "bool":{ "must":[ { "term":{ "cardrecord.fields.name.raw":"HERE_IS_SOME_NAME" } }

我有下一个要搜索的查询

    {  
       "query":{  
          "bool":{  
             "must":[  
                {  
                   "term":{  
                      "cardrecord.fields.name.raw":"HERE_IS_SOME_NAME"
                   }
                }
             ],
             "must_not":[  

             ],
             "should":[  

             ]
          }
       },
       "from":0,
       "size":50,
       "sort":[  

       ],
       "facets":{  

       }
    }

如何按术语修改case Insensive search的查询?如果需要,我可以添加更多说明。

使用过滤器而不是查询,这将大大减少处理量:

{  
   "filter":{  
      "bool":{  
         "must":[  
            {  
               "term":{  
                  "cardrecord.fields.name.raw":"HERE_IS_SOME_NAME"
               }
            }
         ],
         "must_not":[  

         ],
         "should":[  

         ]
      }
   },
   "from":0,
   "size":50,
   "sort":[  

   ],
   "facets":{  

   }
}

使用筛选器而不是查询,这将大大减少处理量:

{  
   "filter":{  
      "bool":{  
         "must":[  
            {  
               "term":{  
                  "cardrecord.fields.name.raw":"HERE_IS_SOME_NAME"
               }
            }
         ],
         "must_not":[  

         ],
         "should":[  

         ]
      }
   },
   "from":0,
   "size":50,
   "sort":[  

   ],
   "facets":{  

   }
}

尝试使用匹配查询

{  
       "query":{  
          "bool":{  
             "must":[  
                {  
                   "match":{  
                      "cardrecord.fields.name.raw":"HERE_IS_SOME_NAME"
                   }
                }
             ],
             "must_not":[  

             ],
             "should":[  

             ]
          }
       },
       "from":0,
       "size":50,
       "sort":[  

       ],
       "facets":{  

       }
    }

尝试使用匹配查询

{  
       "query":{  
          "bool":{  
             "must":[  
                {  
                   "match":{  
                      "cardrecord.fields.name.raw":"HERE_IS_SOME_NAME"
                   }
                }
             ],
             "must_not":[  

             ],
             "should":[  

             ]
          }
       },
       "from":0,
       "size":50,
       "sort":[  

       ],
       "facets":{  

       }
    }

您可以使用
match
查询,但需要匹配
cardrecord.fields.name
字段,因为
raw
子字段可能是
未分析的
,因此不适用于不区分大小写的匹配

{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "cardrecord.fields.name": "HERE_IS_SOME_NAME"
          }
        }
      ],
      "must_not": [],
      "should": []
    }
  },
  "from": 0,
  "size": 50,
  "sort": [],
  "facets": {}
}

您可以使用
match
查询,但需要匹配
cardrecord.fields.name
字段,因为
raw
子字段可能是
未分析的
,因此不适用于不区分大小写的匹配

{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "cardrecord.fields.name": "HERE_IS_SOME_NAME"
          }
        }
      ],
      "must_not": [],
      "should": []
    }
  },
  "from": 0,
  "size": 50,
  "sort": [],
  "facets": {}
}

默认情况下,使用
标准分析器分析所有字段。如果
映射中指定了
“索引”:“未分析”
,则不会分析该字段

标准分析器
将输入字符串转换为小写,并用空格和特殊字符分隔。因此,在您的情况下,
这里有一些\u名称
将被拆分为标记
一些
名称
。但是这里的标记
is
不会被创建,因为它们是英语副词

搜索
“cardrecord.fields.name.raw”
字段时也会发生同样的情况。它拆分为标记,并在特定字段中搜索带有该标记的所有文档(使用
标准分析器
)。注意:也可以为搜索配置单独或不同的
分析器

因此,match query搜索所有带有
一些
名称
标记的文档。因此,您将获得额外的文档

术语查询
专门查找精确的大小写和完整的单词匹配。但它不会匹配任何文档,因为令牌已经是
拆分的
小写的

按照以下步骤满足您的要求:

{
  "mappings": {
    "my_type": {
      "properties": {
        "cardrecord.fields.name.raw": {
          "type":  "string",
          "index": "not_analyzed" 
        }
      }
    }
  }
}
根据上面给出的代码,为名为
my_type
索引
更新此
映射
。不过,您需要使用新映射创建新索引。因为更新可能无法反映。 然后尝试在问题中运行搜索查询

添加查询的详细顺序:

映射:

  {
      "mappings": {
        "my_type": {
          "properties": {
            "cardrecord.fields.name.raw": {
              "type": "string",
              "index": "not_analyzed",
              "store": "true"
            }
          }
        }
      }
    }
索引文档:

{
  "cardrecord.fields.name.raw": "HERE_IS_SOME_NAME"
}
搜索查询:

{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "cardrecord.fields.name.raw": "HERE_IS_SOME_NAME"
          }
        }
      ],
      "must_not": [],
      "should": []
    }
  },
  "from": 0,
  "size": 50,
  "sort": [],
  "facets": {}
}

默认情况下,使用
标准分析器分析所有字段。如果
映射中指定了
“索引”:“未分析”
,则不会分析该字段

标准分析器
将输入字符串转换为小写,并用空格和特殊字符分隔。因此,在您的情况下,
这里有一些\u名称
将被拆分为标记
一些
名称
。但是这里的标记
is
不会被创建,因为它们是英语副词

搜索
“cardrecord.fields.name.raw”
字段时也会发生同样的情况。它拆分为标记,并在特定字段中搜索带有该标记的所有文档(使用
标准分析器
)。注意:也可以为搜索配置单独或不同的
分析器

因此,match query搜索所有带有
一些
名称
标记的文档。因此,您将获得额外的文档

术语查询
专门查找精确的大小写和完整的单词匹配。但它不会匹配任何文档,因为令牌已经是
拆分的
小写的

按照以下步骤满足您的要求:

{
  "mappings": {
    "my_type": {
      "properties": {
        "cardrecord.fields.name.raw": {
          "type":  "string",
          "index": "not_analyzed" 
        }
      }
    }
  }
}
根据上面给出的代码,为名为
my_type
索引
更新此
映射
。不过,您需要使用新映射创建新索引。因为更新可能无法反映。 然后尝试在问题中运行搜索查询

添加查询的详细顺序:

映射:

  {
      "mappings": {
        "my_type": {
          "properties": {
            "cardrecord.fields.name.raw": {
              "type": "string",
              "index": "not_analyzed",
              "store": "true"
            }
          }
        }
      }
    }
索引文档:

{
  "cardrecord.fields.name.raw": "HERE_IS_SOME_NAME"
}
搜索查询:

{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "cardrecord.fields.name.raw": "HERE_IS_SOME_NAME"
          }
        }
      ],
      "must_not": [],
      "should": []
    }
  },
  "from": 0,
  "size": 50,
  "sort": [],
  "facets": {}
}

您使用的是什么版本的ES?您似乎需要使用自定义分析器您使用的是什么版本的ES?您似乎需要使用自定义分析器它可以工作,但在搜索结果中我看到了其他项目。例如,我看到的是四个文档而不是一个。是的,这可能是因为您正在搜索多个术语,或者该字段包含多个已分析为不同标记的术语。这取决于您需要实现什么。如果您需要更深入的帮助,您将不得不分享更多的案例(示例文档、映射等)。请随时更新您的问题,任何可能有用的。它的工作,但在搜索结果中,我看到额外的项目。例如,我看到的是四个文档而不是一个。是的,这可能是因为您正在搜索多个术语,或者该字段包含多个已分析为不同标记的术语。这取决于您需要实现什么。如果您需要更深入的帮助,您将不得不分享更多的案例(示例文档、映射等)。请随时用任何有用的信息更新您的问题。非常感谢您的详细回答!我的解决方案是创建一个自定义分析器(Tokenizer=“keyword”和Filter=[“lowercase”]),将其添加到字段,并在执行映射时设置分析的字段索引。非常感谢您提供详细的答案!我的解决方案是创建一个自定义分析器(Tokenizer=“keyword”和Filter=[“lowercase”]),将其添加到字段,并设置在执行映射时分析的字段索引。