我正在尝试根据categoryCode进行过滤,但没有得到任何结果,
我尝试使用未经分析的文件,但该文件有效,如何使它适用于该特定 Realm ?
"categoryCode": {
"type": "text",
"analyzer": "autocomplete",
"search_analyzer": "standard",
"norms": false,
"copy_to": "all_fields",
"doc_values": false,
"fields": {
"raw": {
"type": "keyword",
"index": false,
"normalizer": "lowercase_normalizer",
"norms": false
},
"fulltext": {
"type": "text",
"analyzer": "standard",
"doc_values": false
}
}
}
查询过滤:
"bool":{
"filter":[
{
"bool":{
"must":[
{
"term":{
"categoryCode":{
"value":"PAYROLL"
}
}
}
]
}
}
]
}
}
最佳答案
您正在搜索的被分析的categoryCode
上,因此将进入分析阶段,并根据standard
分析器(搜索分析器)创建 token , token 也将小写。
而不是categoryCode
,您需要搜索包含文档关键字形式的categoryCode.raw
。 另外,您可能必须像在查询中一样删除lowercase_normalizer
,正在使用term
查询,这不会在原始字段上通过lowercase normalizer
,并且可能导致PAYROLL
与payroll
不匹配。
我已经创建了样本索引定义,索引文档并修改了搜索查询以获取预期的结果(您的整个映射不可用,因此创建了一个最少的示例来说明)
指数def(最小值)
{
"mappings": {
"properties": {
"categoryCode": {
"type": "text",
"fields": {
"raw": {
"type": "keyword",
"norms": false
},
"fulltext": {
"type": "text",
"analyzer": "standard",
"doc_values": false
}
}
}
}
}
}
索引文件
{
"categoryCode" : "PAYROLL"
}
搜索查询
{
"query": {
"bool": {
"filter": [
{
"bool": {
"must": [
{
"term": {
"categoryCode.raw": { -->notice `.raw`
"value": "PAYROLL"
}
}
}
]
}
}
]
}
}
}
搜索结果
"hits": [
{
"_index": "so-60531341",
"_type": "_doc",
"_id": "1",
"_score": 0.0,
"_source": {
"categoryCode": "PAYROLL"
}
}
]