gpt4 book ai didi

elasticsearch - 在全文搜索(elasticsearch)中仅返回完全匹配的内容(子字符串)

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

我在Elasticsearch中有一个带有“标题”字段(已分析的字符串字段)的索引。如果我将以下文件编入索引:

{title: "Joe Dirt"}
{title: "Meet Joe Black"}
{title: "Tomorrow Never Dies"}

搜索查询是“我想明天看电影乔·迪尔特”

我想找到完整标题与搜索查询的子字符串匹配的结果。如果我使用直接匹配查询,则会返回所有这些文档,因为它们都与单词之一匹配。我真的只想返回“Joe Dirt”,因为标题是搜索查询的完全匹配子字符串。

在Elasticsearch中有可能吗?

谢谢!

最佳答案

实现此目的的一种方法如下:

1)在使用keyword token 生成器索引索引title的同时

2)搜索时,使用shingle token-filter从查询字符串中提取子字符串并与标题匹配

例:

索引设置

put test 
{
"settings": {
"analysis": {
"analyzer": {
"substring": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"substring"
]
},
"exact": {
"type": "custom",
"tokenizer": "keyword",
"filter": [
"lowercase"
]
}
},
"filter": {
"substring": {
"type":"shingle",
"output_unigrams" : true

}
}
}
},
"mappings": {
"movie": {
"properties": {
"title": {
"type": "string",
"fields": {
"raw": {
"type": "string",
"analyzer": "exact"
}
}
}
}
}
}
}

索引文档
put test/movie/1
{"title": "Joe Dirt"}
put test/movie/2
{"title": "Meet Joe Black"}
put test/movie/3
{"title": "Tomorrow Never Dies"}

查询
 post test/_search
{
"query": {
"match": {
"title.raw" : {
"analyzer": "substring",
"query": "Joe Dirt tomorrow"
}
}
}
}

结果:
  "hits": {
"total": 1,
"max_score": 0.015511602,
"hits": [
{
"_index": "test",
"_type": "movie",
"_id": "1",
"_score": 0.015511602,
"_source": {
"title": "Joe Dirt"
}
}
]
}

关于elasticsearch - 在全文搜索(elasticsearch)中仅返回完全匹配的内容(子字符串),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37953347/

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