gpt4 book ai didi

regex - Elasticsearch/Lucene正则表达式fquery/query_string不返回所有文档

转载 作者:行者123 更新时间:2023-12-02 23:35:00 30 4
gpt4 key购买 nike

我目前在Elasticsearch中有此映射,正在使用not_analyzed字段建立索引:

PUT /twitter/_mapping/tweet
{
"tweet": {
"properties" : {
"user" : {
"type" : "string",
"index": "not_analyzed"
}
}
}
}


PUT /twitter/tweet/1
{
"user": "CNN"
}
PUT /twitter/tweet/2
{
"user": "cnn"
}
PUT /twitter/tweet/3
{
"user": "Cnn"
}
PUT /twitter/tweet/4
{
"user": "cNN"
}
PUT /twitter/tweet/5
{
"user": "CnN"
}

我想使用不区分大小写的过滤器在此索引上进行搜索(通过NEST生成,因此在更改此查询语法时不太灵活):
POST /twitter/tweet/_search
{
"from": 0,
"size": 10,
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"fquery": {
"query": {
"query_string": {
"query": "user:/[cC][nN][nN]/"
}
}
}
}
]
}
}
}
}
}

但是,此查询仅返回1个文档: "user": "cnn"(小写),而不是所有文档。

为什么是这样?使用 "query": "user:CNN"的相同查询将返回带有正确大小写(大写)的正确文档。

编辑:此外,如果我使用 cnn(小写)删除文档,查询将不返回任何内容。

编辑2 :如果这是我的NEST代码的问题,以下是用于生成查询的代码:
// property path would be something like "user". queryTerm would be something like "cnn"
filterDescriptor.Query(
q =>
q.QueryString(
d =>
d.Query(string.Format("{0}:{1}", propertyPath,
GetCaseInsentitiveRegexExpression(queryTerm))))); // returns something like /[cC][nN][nN]/

最佳答案

您需要设置lowercase_expanded_terms:false。默认情况下,lowercase_expanded_terms设置为true,它会小写通配符,正则表达式查询。

例:

POST /twitter/tweet/_search
{
"from": 0,
"size": 10,
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"fquery": {
"query": {
"query_string": {
"query": "user:/[Cc][nN][nN]/",
"lowercase_expanded_terms": false

}
}
}
}
]
}
}
}
}
}

或在嵌套代码上,这些行上的内容
q.QueryString(
d =>
d.Query(string.Format("{0}:{1}", propertyPath,
GetCaseInsentitiveRegexExpression(queryTerm))).LowercaseExpendedTerms(false))

关于regex - Elasticsearch/Lucene正则表达式fquery/query_string不返回所有文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32321915/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com