gpt4 book ai didi

javascript - 使用 ElasticSearch 7.x 进行精确搜索

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

我正在尝试使用 ElasticSearch ("@elastic/elasticsearch": "^7.5.0") 查找 URL 的精确搜索。我已经像这样配置了我的映射:

const schema = {
userId: {
type: "keyword"
},
url: {
type: "keyword",
index: false,
analyzer: 'keyword'
},
pageTitle: {
type: 'text',
},
pageText: {
type: 'text',
}
};

await client.indices.putMapping({
index,
type,
include_type_name: true,
body: {
properties: schema
}
})

我尝试了不同的查询,它们看起来像这样:

body: {
query: {
bool: {
must: {
match: {
query: 'test stack',
analyzer: 'keyword',
}
}
}
}
}

或第二次尝试:

body: {
query: {
constant_score: {
filter: {
bool: {
must: {
term: {
url: 'test stack'
}
}
}
}
},

}
}

它们都不起作用。我只想获取找到确切字符串“test/stack”的结果。任何帮助将不胜感激。

我尝试添加的数据示例:

[
{"url": "test stack",
"userId": "anotherTest",
"pageTitle": "not important",
"pageText": "not important",
"log": [1, 3, 7]
},
{"url": "test stack",
"userId": "anotherTest",
"pageTitle": "not important",
"pageText": "not important",
"log": [1, 3, 7]
},
{"url": "test stack",
"userId": "anotherTest",
"pageTitle": "not important",
"pageText": "not important",
"log": [1, 3, 7]
}
]

谢谢。

最佳答案

我成功地完成了这项工作。步骤是:1.删​​除索引。2.删除自定义映射功能。3. 创建索引(使用client.indices.create)4. 为第一项建立索引(使用 client.index)。5. 此时,您可以在 postman 中检查 ElasticSearch 创建的动态映射(据我所知,仅在第一个项目被索引后才可见)。您可以通过 http://localhost:9200/history/_mappings 发起 get 请求,响应应如下所示:

{
"history": {
"mappings": {
"properties": {
"fullTitle": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"log": {
"properties": {
"startTime": {
"type": "long"
},
"timeSpent": {
"type": "long"
}
}
},
"protocol": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"text": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"totalTimeSpent": {
"type": "long"
},
"totalVisits": {
"type": "long"
},
"url": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"userId": {
"type": "long"
}
}
}
}
}

正如您所看到的,任何索引为文本的字段都附加了另一个字段,称为关键字,可用于精确匹配。6. 获取精确匹配的查询如下所示:

   const result = await esClient.search({
index: 'history',
body: {
query: {
term: {
'url.keyword': {
value: toInsert.url
}
}
}
}
})

此时,在我的例子中,只有在“url”字段完全匹配的情况下,您才应该收到结果。希望这对其他人有帮助。感谢@ibexit 试图帮助我。

关于javascript - 使用 ElasticSearch 7.x 进行精确搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59956745/

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