6

现在的情况

我正在使用弹性搜索的渗透功能。它运行良好 - 我为新文档获取匹配的 percolate-ids,并且基本上可以构建反向搜索。到目前为止一切都很好。

问题

问题来了:我想要一个分数来表示给定文档与过滤器查询的匹配程度(正是普通查询给我的分数)。为此,我添加了track_scores,但没有运气。

我在以下文档中找到了这个track_scores

...分数基于查询,表示查询如何与渗透查询的元数据匹配,而不是被渗透的文档如何与查询匹配...

我想要/需要的甚至可能吗?

显示问题的示例

这是一个演示问题的示例(取自elasticsearch.org)。在这里,在 percolate-response 中返回的分数总是1.0,无论输入文档如何:

//Index the percolator
curl -XPUT 'localhost:9200/my-index/.percolator/1' -d '{
    "query" : {
        "match" : {
            "message" : "bonsai tree"
        }
    }
}'

渗透第一个文件:

curl -XGET 'localhost:9200/my-index/message/_percolate' -d '{
    "doc" : {
        "message" : "A new bonsai tree in the office"
    },
    "track_scores" : "true"
}'


//...returns
{"took": 1, "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
}, "total": 1, "matches": [
    {
        "_index": "my-index",
        "_id": "1",
        "_score": 1.0 <-- Score
    }
]}

渗透第二个(不同的)一个:

//Percolate a second one
curl -XGET 'localhost:9200/my-index/message/_percolate' -d '{
    "doc" : {
        "message" : "A new bonsai tree in the office next to another bonsai tree is cool!"
    },
     "track_scores" : "true"
}'


//...returns
{"took": 3, "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
}, "total": 1, "matches": [
    {
        "_index": "my-index",
        "_id": "1",
        "_score": 1.0 <-- SAME Score, but different document (other score needed here!)
    }
]}

我需要什么

我想0.8为第一个文档和0.9第二个文档打分。但是他们不能像这里一样获得相同的分数。我怎样才能达到我想要的?

非常感谢您的任何想法和帮助。

4

2 回答 2

3

分数是相对于数据集中的其他文档的。您可能会进行某种自定义评分,只关注手头文档的词频/逆文档频率,但可能不会非常有效,但可能已经足够好了。

我不确定这是否是解决您的问题的可行解决方案,但一种方法是针对整个数据集重新运行所有匹配的渗透查询,并从中获取您的文档分数并使用该数据重新索引文档。由于它都是相对的,因此这可能需要您更新与查询匹配的所有其他文档。可能,最好在某个设定的时间间隔内进行全局重新评分。

于 2014-06-21T05:13:12.173 回答
-1

您的文档没有定义查询来限制搜索空间。_score是根据此查询计算的,而不是您渗透的查询。

于 2014-09-15T13:55:45.670 回答