elasticsearch,Python,elasticsearch" /> elasticsearch,Python,elasticsearch" />

Python 如何通过特定字段查询Elasticsearch以提高效率

Python 如何通过特定字段查询Elasticsearch以提高效率,python,elasticsearch,Python,elasticsearch,如何索引和查询包含自定义权重的文档,以便使用该权重提升特定的查询结果 我用{“text”:“how now brown cow”,“weight”:2.3}等正文为简单文档编制了索引 使用Python包装器,我可以通过执行以下操作轻松搜索这些内容: es = Elasticsearch() results = es.search( index='my_index', body={ 'query':{ 'query_string':{

如何索引和查询包含自定义权重的文档,以便使用该权重提升特定的查询结果

我用
{“text”:“how now brown cow”,“weight”:2.3}
等正文为简单文档编制了索引

使用Python包装器,我可以通过执行以下操作轻松搜索这些内容:

es = Elasticsearch()
results = es.search(
    index='my_index',
    body={
        'query':{
            'query_string':{
                'query':my_search_terms,
            },
        },
    },
)

但是,在阅读之后,我不知道如何合并权重字段,以便通过该值提高结果。我该怎么做呢?

我相信你可以用

比如:

{
"query": {
    "function_score": {
        "query": {  
            "match": {
                "text": "how now brown cow"
            }
        },
        "functions": [{
            "script_score": { 
                "script": "doc['weight'].value"
            }
        }],
        "score_mode": "multiply"
    }
}
}

为什么不使用?@femtoRgon中描述的
boost
属性呢?我不确定这是我想要的。这似乎给字段分配了一个固定的权重,当从多个字段的匹配中累积和计算分数时,而不仅仅是针对特定的结果。此外,我不清楚在哪里指定“属性”。试图在索引JSON中传递它会给我一个错误。应该是每个字段,每个文档,而不是该字段中的所有内容(尽管您也可以这样做)。我在文档中看到的一个简单示例是:
{“message”:{“_value”:“boosted value”,“_boost”:2.0}
QueryParsingException[[howdoi]没有为[function_score]];}]注册查询)您使用的ElasticSearch版本是什么?我已经安装了0.20.6Ah,我相信直到0.90.4版本才引入功能评分。0.90.0是Lucene 4的第一个版本,它引入了一些改进,允许以合理的性能对文档内容进行评分。我认为您可能需要依赖简单的增强,或者升级elasticsearch。是的,这就是问题所在。谢谢