gpt4 book ai didi

elasticsearch - 获取 Elasticsearch 字段中特定术语的出现次数

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

我有一个带有以下映射的elasticsearch索引(帖子):

{
"id": "integer",
"title": "text",
"description": "text"
}

我想简单地在 单个特定文档的描述字段中找到 特定术语的出现次数(我有要查找的文档ID和术语)。

例如,我有一个类似{id:123,title:“some title”的文章,描述:“我的城市是洛杉矶,这个文章描述中有两次出现单词city“}。

我有此职位的文档ID /职位ID,只想查找“city”一词在此职位的说明中出现了多少次。 (在这种情况下,结果应为2)

似乎无法找到这种搜索的方式,我不希望所有文档都出现这种情况,而只是针对单个文档并在其“一个”字段内。请对此提出建议。谢谢

Elasticsearch版本:7.5

最佳答案

您可以在terms上使用description聚合,但需要确保在其上将其fielddata设置为true

PUT kamboh/
{
"mappings": {
"properties": {
"id": {
"type": "integer"
},
"title": {
"type": "text"
},
"description": {
"type": "text",
"fields": {
"simple_analyzer": {
"type": "text",
"fielddata": true,
"analyzer": "simple"
},
"keyword": {
"type": "keyword"
}
}
}
}
}
}

提取示例文档:
PUT kamboh/_doc/1
{
"id": 123,
"title": "some title",
"description": "my city is LA, this post description has two occurrences of word city "
}

汇总:
GET kamboh/_search
{
"size": 0,
"aggregations": {
"terms_agg": {
"terms": {
"field": "description.simple_analyzer",
"size": 20
}
}
}
}

屈服:
"aggregations" : {
"terms_agg" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "city",
"doc_count" : 1
},
{
"key" : "description",
"doc_count" : 1
},
...
]
}
}

现在,如您所见, simple analyzer将字符串拆分为单词并使它们变为小写字母,但它也消除了字符串中的重复城市!我想不出可以保留重复数据的分析仪...话虽这么说,

建议在索引之前进行这些字数统计!

您将用空格分隔字符串,并将它们索引为单词数组而不是长字符串。

在搜索时也可以这样做,尽管它非常昂贵,无法很好地扩展并且您需要在es.yaml中添加 script.painless.regex.enabled: true:
GET kamboh/_search
{
"size": 0,
"aggregations": {
"terms_script": {
"scripted_metric": {
"params": {
"word_of_interest": ""
},
"init_script": "state.map = [:];",
"map_script": """
if (!doc.containsKey('description')) return;

def split_by_whitespace = / /.split(doc['description.keyword'].value);

for (def word : split_by_whitespace) {
if (params['word_of_interest'] !== "" && params['word_of_interest'] != word) {
return;
}

if (state.map.containsKey(word)) {
state.map[word] += 1;
return;
}

state.map[word] = 1;
}
""",
"combine_script": "return state.map;",
"reduce_script": "return states;"
}
}
}
}

屈服
...
"aggregations" : {
"terms_script" : {
"value" : [
{
"occurrences" : 1,
"post" : 1,
"city" : 2, <------
"LA," : 1,
"of" : 1,
"this" : 1,
"description" : 1,
"is" : 1,
"has" : 1,
"my" : 1,
"two" : 1,
"word" : 1
}
]
}
}
...

关于elasticsearch - 获取 Elasticsearch 字段中特定术语的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60865618/

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