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”]),将其添加到字段,并设置在执行映射时分析的字段索引。