gpt4 book ai didi

Elasticsearch:FVH 突出显示有多个前后标记错误地标记标记?

转载 作者:行者123 更新时间:2023-11-29 02:57:25 25 4
gpt4 key购买 nike

我正在使用带有两个 match 的 bool 查询来查询我的索引条款。对于每个术语,我都有一组单独的前后标签。使用突出显示,我想获取同时存在这两个术语的文档,并查看哪些标记与它们中的每一个匹配。该索引包含使用 morfologik 分析的波兰语文档.让我们将我正在搜索的两个术语称为 aspectfeature .我想查询索引并检索同时存在特定方面和特征的文档,我想要 highlight使用 <aspect> 标记方面标记的功能标签和特征 <feature>标签。大多数情况下,它会按预期工作,但有时 Elasticsearch 会错误地标记一个或两个标记。我给你举个例子。

假设我的索引包含以下文档:

"Najlepsza maseczka na zniszczone włosy!"

如果我搜索“maseczka”(方面)和“dobry”(特征),我希望输出是这样的:

"<feature>Najlepsza</feature> <aspect>maseczka</aspect> na zniszczone włosy! "

出于某种原因,Elasticsearch 的结果是这样的:

"<aspect>Najlepsza</aspect> <aspect>maseczka</aspect> na zniszczone włosy! "

目前我所知道的:

  • 我认为在分析时方面和特征可能具有相似的形式,但事实并非如此,例如 _analyze对于上面的例子返回:
#query
GET my_index/_analyze
{
"analyzer": "morfologik",
"text": "dobra maseczka"
}

#results
{
"tokens": [
{
"token": "dobra",
"start_offset": 0,
"end_offset": 5,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "dobro",
"start_offset": 0,
"end_offset": 5,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "dobry",
"start_offset": 0,
"end_offset": 5,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "maseczka",
"start_offset": 6,
"end_offset": 14,
"type": "<ALPHANUM>",
"position": 1
}
]
}
# Analysis of the document:
get my_index/_analyze
{
"analyzer": "morfologik",
"text": "Najlepsza maseczka na zniszczone włosy"
}
# response
{
"tokens": [
{
"token": "dobry",
"start_offset": 0,
"end_offset": 9,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "maseczka",
"start_offset": 10,
"end_offset": 18,
"type": "<ALPHANUM>",
"position": 1
},
{
"token": "na",
"start_offset": 19,
"end_offset": 21,
"type": "<ALPHANUM>",
"position": 2
},
...
]
}
  • 这也不是特定方面或功能的问题,因为对于某些查询,索引将返回正确和错误突出显示的文档(因此我希望它是文档而非查询的问题)

  • 在某些情况下,这两个术语都被突出显示为方面,在某些方面被标记为特征,特征被标记为方面,到目前为止我还没有找到任何规则

  • 我想如果我的搜索词与突出显示标签的顺序相匹配,第一个词应该总是得到第一个标签,第二个词总是第二个标签,但也许它们的工作方式不同?我认为这就是受 this response 启发的工作方式:

    Using the Fast Vector Highlighter, you can specify tags in order of "importance" which seems to mean that their order and the order of your search terms should match.

我的索引是这样构造的:

{
"settings": {
"analysis": {
"analyzer": {
"morfologik": {
"tokenizer": "standard",
"filter": [
"morfologik_stem",
"lowercase"
],
"type": "custom"
}
}
}
},
"mappings": {
"doc": {
"properties": {
"content": {
"type": "text",
"term_vector": "with_positions_offsets",
"analyzer": "morfologik"
},
"original_doc": {
"type": "integer"
}
}
}
}
}

这是我的查询:

GET my_index/_search
{
"query": {
"bool": {
"must": [
{ "match" : { "content" : "maseczki" } },
{ "match" : { "content" : "dobre" } }
]
}},
"highlight": {
"fields": {
"content": {
"fragment_size": 200,
"type": "fvh",
"pre_tags": ["<aspect>", "<feature>"],
"post_tags": ["</aspect>", "</feature>"]
}
}
}
}

这是一个示例响应:

{
"_index": "my_index",
"_type": "doc",
"_id": "R91v7GkB0hUBqPARgC54",
"_score": 16.864662,
"_source": {
"content": "Najlepsza maseczka na zniszczone włosy! ",
"original_doc_id": 74290
},
"highlight": {
"content": [
"<aspect>Najlepsza</aspect> <aspect>maseczka</aspect> na zniszczone włosy! "
]
}
},

正如我所说,大多数时候查询工作正常,有时只针对特定查询结果的一个子集进行全面突出显示,就像在“(opakowanie, solidne)”的情况下一样:

  • 这里的aspect其实就是feature,feature就是aspect
<aspect>solidne</aspect>, naprawdę świetne <feature>opakowanie</feature>
  • solidne应在此处标记为功能
Jedyne do czego mogłabym się przyczepić to <aspect>opakowanie</aspect> które wg mnie niestety nie jest <aspect>solidne</aspect>

最佳答案

据我了解,如果您想对空格分隔的字符串进行匹配查询,您应该使用标记器作为 whitespace

我建议您检查一下这个分词器。 https://www.elastic.co/guide/en/elasticsearch/reference/5.4/analysis-whitespace-tokenizer.html

关于Elasticsearch:FVH 突出显示有多个前后标记错误地标记标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55571016/

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