gpt4 book ai didi

regex - Elasticsearch:使用正则表达式以特定顺序匹配模式

转载 作者:行者123 更新时间:2023-12-03 01:10:10 25 4
gpt4 key购买 nike

我想知道是否有可能在Elasticsearch中使用regexp来按特定顺序匹配具有不同字符串的模式。
例如,对于字符串:still_adv be_aux pick_verb up_adp the_det bus_noun,我想将单词的组合与标签ADV + AUX + VERB匹配,因此此处将为still_adv be_aux pick_verb
我将使用此正则表达式:

{
"query_string":
{
"fields": ["sentences_features.tagger.annotation],
"query": "*(.*_adv) (be_aux) (.*_verb)*"
}
}
但是,此正则表达式无法正常工作,并且分别匹配每个单词。

最佳答案

您可以将整个组括在括号中:

*((.*_adv) (be_aux) (.*_verb))*
但是,为了将来引用,最好将这些注释标记拆分为更易于搜索的键值对,例如:
[ {word_type: 'adv', text: 'still', position: 0 }, {...}, ... ]
开始时需要做更多的工作,但稍后会派上用场。

编辑
keyword字段映射设置索引后
PUT myind
{
"mappings": {
"properties": {
"annot": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
}
}
}
}
并同步一些文档
// valid
POST myind/_doc
{
"annot": "and_CCONJ other_ADJ driver_NOUN_b1 professional_ADJ"
}

// valid
POST myind/_doc
{
"annot": "xyz other_ADJ driver_NOUN_b1 xyz"
}

// invalid
POST myind/_doc
{
"annot": "and_CCONJ other_ADJ professional_ADJ driver_NOUN_b1"
}
我们可以像这样在 regexp上使用 .keyword查询:
GET myind/_search
{
"query": {
"regexp": {
"annot.keyword": "(.* )?other_ADJ [a-zA-Z*]*_NOUN_b1( .*)?"
}
}
}
如果您不在乎这两个 token 之间是什么,可以使用
(.* )?other_ADJ( .*)?[a-zA-Z*]*_NOUN_b1( .*)?
对于HTML标签剥离,请检查 this answer

关于regex - Elasticsearch:使用正则表达式以特定顺序匹配模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64539672/

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