gpt4 book ai didi

regex - 正则表达式和 Elasticsearch

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

我正在尝试使用elasticsearch检索一些公司结果。我想让公司以“A”开头,然后以“B”开头,依此类推。如果我只是用“prefix”做一个非常典型的查询,就像这样

GET apple/company/_search
{
"query": {
"prefix": {
"name": "a"
}
},
"fields": [
"id",
"name",
"websiteUrl"
],
"size": 100
}

但这将返回Acme以及Lemur和Associates,因此我需要区分全名开头的A和单词开头的A。

看起来正则表达式似乎可以解决这里的问题,但是 flex 搜索只是忽略了我尝试的一切。在其他应用程序的测试中, ^[\S]a*应该为您提供以 A开头且前面没有空格的任何内容。 flex 搜索返回0个结果,并显示以下内容:
GET apple/company/_search
{
"query": {
"regexp": {
"name": "^[\S]a*"
}
},
"fields": [
"id",
"name",
"websiteUrl"
],
"size": 100
}

在FACT中,Elasticsearch的Sense UI将立即提醒您“字符串错误语法错误”。这是因为即使在查询中, flex 搜索也希望逃脱某些字符。尽管如此, ^[\\S]a*也不起作用。

最佳答案

在Elasticsearch中进行搜索对于查询本身来说是,对于查询本身来说也是,而且对于数据的建模也是,因此最适合要使用的查询。一个人不能简单地索引任何内容,然后尝试努力提出一个执行某些操作的查询。

您的查询的Elasticsearch方法是对该字段具有以下映射:

PUT /apple
{
"settings": {
"index": {
"analysis": {
"analyzer": {
"keyword_lowercase": {
"type": "custom",
"tokenizer": "keyword",
"filter": [
"lowercase"
]
}
}
}
}
},
"mappings": {
"company": {
"properties": {
"name": {
"type": "string",
"fields": {
"analyzed_lowercase": {
"type": "string",
"analyzer": "keyword_lowercase"
}
}
}
}
}
}
}

并使用 这个查询:
GET /apple/company/_search
{
"query": {
"prefix": {
"name.analyzed_lowercase": {
"value": "a"
}
}
}
}

要么
GET /apple/company/_search
{
"query": {
"query_string": {
"query": "name.analyzed_lowercase:A*"
}
}
}

关于regex - 正则表达式和 Elasticsearch ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36511301/

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