如果使用,弹性搜索词查询将不起作用 field.keyword
Elastic search term query not working if used field.keyword
我有下面的弹性搜索映射
{
"2021-05-ui":{
"mappings":{
"userinfo":{
"properties":{
"address":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
},
"name":{
"type":"keyword"
},
"userId":{
"type":"keyword"
}
}
}
}
}
我想在 userId 字段上使用术语查询,如下所示,它不起作用,但是当我从下面的查询中删除 .keyword
时,我希望查询与 userId 字段的精确值匹配
{
"query": {
"bool": {
"filter": [
{
"term": {
"userId.keyword": "test@user.com"
}
}
]
}
}
}
我只希望使用 "userId.keyword"
进行查询,因为其他环境同时具有文本和关键字映射,您能否建议我们可以使用哪个查询来获得精确匹配,我尝试使用匹配,match_phrase 但没有太大帮助。
userId
字段为keyword
类型,即使用关键字分析器,而不是标准分析器。在这种情况下,您只会获得完全匹配的结果
由于userId
属于keyword
类型,userId.keyword
没有字段,所以必须使用userId
进行term查询
{
"query": {
"bool": {
"filter": [
{
"term": {
"userId": "test@user.com"
}
}
]
}
}
}
但是如果你想存储 userId
字段作为 text
和 keyword
类型,那么你可以 update your index mapping as shown below to use multi fields
PUT /_mapping
{
"properties": {
"userId": {
"type": "keyword",
"fields": {
"raw": {
"type": "text"
}
}
}
}
}
然后重新索引数据。在此之后,您将能够使用 keyword
类型的 "userId"
字段和 text
类型
的 "userId.raw"
字段进行查询
我有下面的弹性搜索映射
{
"2021-05-ui":{
"mappings":{
"userinfo":{
"properties":{
"address":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
},
"name":{
"type":"keyword"
},
"userId":{
"type":"keyword"
}
}
}
}
}
我想在 userId 字段上使用术语查询,如下所示,它不起作用,但是当我从下面的查询中删除 .keyword
时,我希望查询与 userId 字段的精确值匹配
{
"query": {
"bool": {
"filter": [
{
"term": {
"userId.keyword": "test@user.com"
}
}
]
}
}
}
我只希望使用 "userId.keyword"
进行查询,因为其他环境同时具有文本和关键字映射,您能否建议我们可以使用哪个查询来获得精确匹配,我尝试使用匹配,match_phrase 但没有太大帮助。
userId
字段为keyword
类型,即使用关键字分析器,而不是标准分析器。在这种情况下,您只会获得完全匹配的结果
由于userId
属于keyword
类型,userId.keyword
没有字段,所以必须使用userId
进行term查询
{
"query": {
"bool": {
"filter": [
{
"term": {
"userId": "test@user.com"
}
}
]
}
}
}
但是如果你想存储 userId
字段作为 text
和 keyword
类型,那么你可以 update your index mapping as shown below to use multi fields
PUT /_mapping
{
"properties": {
"userId": {
"type": "keyword",
"fields": {
"raw": {
"type": "text"
}
}
}
}
}
然后重新索引数据。在此之后,您将能够使用 keyword
类型的 "userId"
字段和 text
类型
"userId.raw"
字段进行查询