当前位置: 首页 > 面试题库 >

Elasticsearch小写过滤器搜索

鱼旺
2023-03-14
问题内容

我正在尝试搜索数据库,并能够使用大写/小写过滤器术语,但是我注意到在query应用分析器时,我不知道如何在过滤后的搜索中应用小写分析器。这是查询:

{
    "query": {
        "filtered": {
            "filter": {
                "bool": {
                    "should": [
                        {
                            "term": {
                                "language": "mandarin" // Returns a doc
                            }
                        },
                        {
                            "term": {
                                "language": "Italian" // Does NOT return a doc, but will if lowercased
                            }
                        }
                    ]
                }
            }
        }
    }
}

我有一个languages小写的类型:

"analyzer": {
    "lower_keyword": {
        "type": "custom",
        "tokenizer": "keyword",
        "filter": "lowercase"
    }
}

以及相应的映射:

"mappings": {
    "languages": {
        "_id": {
            "path": "languageID"
        },
        "properties": {
            "languageID": {
                "type": "integer"
            },
            "language": {
                "type": "string",
                "analyzer": "lower_keyword"
            },
            "native": {
                "type": "string",
                "analyzer": "keyword"
            },
            "meta": {
                "type": "nested"
            },
            "language_suggest": {
                "type": "completion"
            }
        }
    }
}

问题答案:

问题是您在索引期间分析了一个字段以使其小写,但您正在对未分析的查询使用术语过滤器:

术语过滤器

筛选具有包含术语(未分析)的字段的文档。与术语查询类似,不同之处在于它充当过滤器。

http://www.elasticsearch.org/guide/zh-
CN/elasticsearch/reference/current/query-dsl-term-
filter.html

我会尝试使用查询过滤器代替:

查询过滤器

包装任何查询以用作过滤器。可以放置在接受过滤器的查询中。

例:

{
    "constantScore" : {
        "filter" : {
            "query" : {
                "query_string" : {
                    "query" : "this AND that OR thus"
                }
            }
        }
    } }

http://www.elasticsearch.org/guide/zh-
CN/elasticsearch/reference/current/query-dsl-query-filter.html#query-dsl-
query-
filter



 类似资料:
  • 我阅读了一些关于查询上下文和过滤上下文的文章和文档,了解到如果你不需要进行全文搜索或评分,最好使用过滤上下文。就我而言,我想返回包含ID的日志……所以我意识到我应该只使用过滤上下文而不是查询上下文。除了全文搜索或评分之外,是否有一条硬基线来定义何时应该使用其中一个? 所以我从我最初的DSL查询搜索cmd: 到过滤器上下文: 因为,我想使用NEST来执行我采用这种方法的查询搜索。 这是使用NEST进

  • 问题内容: 我已经下载了包含技能分类法的onet数据集,并将其上传到了Elasticsearch中。在技​​能分类中,有一些技能,例如c ++ 、. net,C#。我想给c#并且只获得c#的技能。通过检查一些链接,我已如下设置索引的映射和设置。 当我使用如下查询 我正在获得所有具有“ c”的技能 当我使用以下查询时假设应用了分析器 我得到空输出。我是否正确包括了分析仪,或者我的查询错误? 问题答案

  • 问题内容: “过滤后的查询和过滤器”与“根查询和过滤器”之间有什么区别吗?例如 情况1: 情况2: 我在http://elasticsearch-users.115913.n3.nabble.com/Filtered-query-vs-using- filter-outside-td3960119.html中 找到了此讨论,但所引用的URL是404,并且解释过于简洁我。 请示教或提供指出这些区别的

  • 我基本上是在尝试禁用小写过滤器,以便能够对文本字段进行区分大小写的匹配。按照索引和分析器文档,我创建了以下不带小写过滤器的映射: PUT/my_索引 我启用fielddata,以便在之后检查标记化 放置我的索引/\u映射/\u文档 我测试了自定义分析器,以确保它不像预期的那样是小写的 后 /my_index/analyze 得到以下响应 太好了,事情并没有像我想的那样变小。现在我试着插入相同的文本

  • 我从事elasticsearch,我尝试混合两个工作查询。第一个是“and filter”,第二个是“bool filter”,但我失败了。 我的查询是从用户交互界面动态生成的。 “和过滤器”: 我需要“和过滤器”来查询数据,例如,字段必须等于“非洲”或“亚洲”或为空。这是一个工作查询的示例: 此查询工作正常,结果如下: 现在我需要用字段“D\u TYPESTATUS”来限制结果数据,该字段必须与

  • 我在ES中有一个多匹配查询,希望添加一个过滤器。 添加此筛选器的语法是什么? 我试过: