gpt4 book ai didi

python - 如何使Elasticsearch返回所有包含特定术语的文档而不对其评分

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

我有以下数据:

{"_index": "simple", "_type": "motorcycle", "_source": {"date": "2018-04-28T10:55", "price": 134900, "sellerName": "Bike MC V\u00e4st AB", "description": "KTM 1290 Super Duke R,Bike G\u00f6teborg M\u00e4tarst\u00e4llning: 498 mil F\u00e4rg: M\u00f6rkbl\u00e5 Typ: Sport Info: M\u00e4rke: KTM 1290 Super Duke R, Bike G\u00f6teborg. F\u00e4rg: Svart. Pris : 134900 kr. \u00c5rsmodell: 2017. M\u00e4tarst\u00e4llning: 498 mil. Senaste service gjordes vid: 498 mil. N\u00e4sta service \u00e4r vid: 1500 mil. Datum f\u00f6r n\u00e4sta besiktning: 2021-04-30. Motoreffekt: 177 HK. Framd\u00e4ck: 60 % kvar, bakd\u00e4ck: 100 % kvar. Utrustning: Arrow slipon inkl original, kraschpuckar, Trackpack. Instruktionsbok, extranyckel medf\u00f6ljer . MC:n har genomg\u00e5tt inbytestest p\u00e5 48 punkter. Nygaranti tom: 2019-04-06. Finansierings ex: 20% kontant = 27059kr, m\u00e5nadsbelopp: 1477kr. MC:n levereras nyservad med nytt bakd\u00e4ck, (KTM 1290 Super Duke R, 1290, sd r, duke, naked, streefighter) Bike G\u00f6teborg 031 3892801", "location": "G\u00f6teborg, Hisingen", "id": 447, "title": "KTM 1290 Super Duke R,Bike G\u00f6teborg", "modelYear": 2017, "url": "https://www.blocket.se/goteborg/KTM_1290_Super_Duke_R_Bike_Goteborg_79076153.htm?ca=11&w=3", "vehicleType": "Sport"}}
{"_index": "simple", "_type": "motorcycle", "_source": {"date": "2018-04-27T16:19", "price": 125000, "sellerName": "Henrik \u00d6rtenwall", "description": "Harley Davidson Night Rod VRSCDX. Fula, breda, l\u00e5nga baksk\u00e4rmen bytt mot en kortare. Utbytta blinkers fram + bak samt baklampa. Nytt rakare, l\u00e4gre, svart styre. M\u00e5nga sm\u00e5 detaljer som bytta fotpinnar, gaffelbensskydd etc. Ca 2800 mil.", "location": "G\u00f6teborg, V\u00e4stra Centrum", "id": 753, "title": "HD Night Rod", "modelYear": 2007, "url": "https://www.blocket.se/goteborg/HD_Night_Rod_79065407.htm?ca=11&w=3", "vehicleType": "Custom"}}

我正在像这样索引:
    def create_index(self, file_path):
"""
Takes path to file containing JSON-formatted data
and indexes into Elasticsearch index.
"""
print('Creating index "{}"'.format(INDEX_NAME))

request_body = {
"settings":{
"index":{
"number_of_shards":1,
"number_of_replicas":0
}
},
"mappings":{
"motorcycle":{
"properties":{
"location": {
"type":"keyword",
},
"vehicleType": {
"type": "keyword",
},
"description":{
"type":"text",
"analyzer":"swedish",
},
}
}
}
}
self.es.indices.create(index = INDEX_NAME, body = request_body)
f_in = open(PATH_TO_DATASET, "r")
actions = (json.loads(line) for line in f_in)
print("Performed bulk index: {}".format(bulk(self.es, actions)))
self.es.indices.refresh(index = "simple")

数据有两个文档。他们两个都有一个位置字段,在第一个文档中将其设置为 "G\u00f6teborg, Hisingen",在第二个文档中将其设置为 "G\u00f6teborg, V\u00e4stra Centrum"。如您在我的代码中所见, location字段是一个关键字字段。开始时,我使用 filter过滤 location字段:
{
"query": {
"bool": {
"filter": [
{
"term": {
"location": "PlaceName"
}
}
]
}
}
}

但是,这要求 PlaceName与要返回的文档的 location字段完全相同。那不是我想要的 我希望其location字段包含placeName的任何文档都返回。因此,例如,如果我为location字段指定 G\u00f6teborg,则上述数据中的两个文档都应匹配。另外,我不希望这会影响文档的评分,因此我可以将其用作过滤器。

这是我的尝试:
{
"query": {
"bool": {
"must":{
"term": {
"location": "G\u00f6teborg",
"boost":0
}
}
}
}
}

由于 boost字段,该查询无效(返回错误消息)。如果我删除 boost,查询将不提供匹配项,这也不是很好。

这里有什么问题?如何获得所需的功能?

编辑:

此查询也没有返回结果:
{
"query": {
"term": {
"location":"G\u00f6teborg"
}
}
}

PS。将 G\u00f6teborg更改为 Göteborg可获得相同的结果。

编辑2:
{
"query": {
"match": {
"location":{
"query": "G\u00f6teborg",
"boost": 0
}

}
}
}

该查询的作用是返回所有得分为0的相关文档。

最佳答案

您应该将location字段的类型更改为text-keyword类型仅允许完全匹配,但是text字段将使用输入上的标准分析器执行analysis,作为该分析的一部分,它将执行标记化,将文本拆分为单词因此,当您查询该字段时,您还可以匹配部分内容。

除此之外,由于希望将分析器也应用于查询,因此最好将查询类型从term更改为match

查询示例:

{
"query": {
"bool": {
"filter": [
{
"match": {
"location": "PlaceName"
}
}
]
}
}
}

关于python - 如何使Elasticsearch返回所有包含特定术语的文档而不对其评分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50315511/

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