我有下一个搜索查询
{
"query":{
"bool":{
"must":[
{
"term":{
"cardrecord.fields.name.raw":"HERE_IS_SOME_NAME"
}
}
],
"must_not":[
],
"should":[
]
}
},
"from":0,
"size":50,
"sort":[
],
"facets":{
}
}
如何按术语修改案例insensetive搜索的查询?如果需要,我可以添加更多描述。
答案 0 :(得分:1)
使用过滤器代替查询,这将减少大量处理:
{
"filter":{
"bool":{
"must":[
{
"term":{
"cardrecord.fields.name.raw":"HERE_IS_SOME_NAME"
}
}
],
"must_not":[
],
"should":[
]
}
},
"from":0,
"size":50,
"sort":[
],
"facets":{
}
}
答案 1 :(得分:1)
尝试使用匹配查询
{
"query":{
"bool":{
"must":[
{
"match":{
"cardrecord.fields.name.raw":"HERE_IS_SOME_NAME"
}
}
],
"must_not":[
],
"should":[
]
}
},
"from":0,
"size":50,
"sort":[
],
"facets":{
}
}
答案 2 :(得分:1)
您可以使用match
查询,但需要匹配cardrecord.fields.name
字段,因为raw
子字段可能是not_analyzed
,因此无法使用用于不区分大小写的匹配。
{
"query": {
"bool": {
"must": [
{
"match": {
"cardrecord.fields.name": "HERE_IS_SOME_NAME"
}
}
],
"must_not": [],
"should": []
}
},
"from": 0,
"size": 50,
"sort": [],
"facets": {}
}
答案 3 :(得分:1)
默认情况下,使用Standard Analyzer
分析所有字段。如果在"index":"not_analyzed"
中指定mapping
,则不会分析该字段
Standard Analyzer
将输入字符串转换为小写,并使用空格和特殊字符进行拆分。因此,在您的情况下,HERE_IS_SOME_NAME
将被分为令牌some
,name
。但令牌here
和is
不会被创建,因为它们是英语副词。
搜索"cardrecord.fields.name.raw"
字段时会发生同样的事情。它会拆分为令牌,并在特定字段中使用该令牌搜索所有文档(使用Standard Analyzer
)。 P.S:可以配置单独或不同的analyzer
进行搜索。
所以匹配查询会搜索包含some
和name
令牌的所有文档。因此,您将获得其他文件。
term query
专门查找确切大小写和完整单词匹配。但它不会匹配任何文档,因为令牌已经split
和lowercase
根据您的要求执行以下步骤:
{
"mappings": {
"my_type": {
"properties": {
"cardrecord.fields.name.raw": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
根据上面给出的代码,为mapping
名为index
的{{1}}更新此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": {}
}