了解ElasticSearch

时间:2016-08-02 08:51:54

标签: elasticsearch

为了构建搜索引擎,我一直在使用ElasticSearch,并且我有兴趣手动更改每个术语的IDF(反向文档频率)以匹配可以测量的IDF来自Google Books unigrams。

为了做到这一点,我计划做以下事情:

1)仅使用1个分片(因此不会为每个分片计算IDF,它们是"全局")

2)通过对索引中的每个文档运行此查询,获取每个术语的ttf(总计术语频率,用于计算IDF)

curl -XGET 'http://localhost:9200/index/document/id_doc/_termvectors?pretty=true' -d '{
  "fields" : ["content"],
  "offsets" : true,
  "term_statistics" : true
}'

3)使用Google Books unigram模型" rescale"每个学期ttf

问题是,一旦我找到了"提升"我必须为每个术语使用的因素,我如何在查询中使用它?

例如,让我们考虑一下这个例子

"query":
{  
    "bool":{  
        "should":[  
            {  
                "match":{  
                    "title":{  
                        "query":"cat",
                        "boost":2
                    }
                }
            },
            {  
                "match":{  
                    "content":{  
                        "query":"cat",
                        "boost":2
                    }
                }
            }
        ]
    }
}

这是否意味着术语" cat"的IDF将被提升/乘以2倍?

另外,如果不是搜索一个单词而是一个句子,会发生什么?这是否意味着每个单词的IDF将被提升2?

我尝试了解boost参数(https://www.elastic.co/guide/en/elasticsearch/guide/current/query-time-boosting.html)和t.getBoost()的作用,但这看起来有点令人困惑。

1 个答案:

答案 0 :(得分:0)

在使用多个查询子句查询时使用提升,例如:

{  
    "bool":{  
        "should":[  
            {  
                "match":{  
                    "clause1":{  
                        "query":"query1",
                        "boost":3
                    }
                }
            },
            {  
                "match":{  
                    "clause2":{  
                        "query":"query2",
                        "boost":2
                    }
                }
            },
            {  
                "match":{  
                    "clause3":{  
                        "query":"query1",
                        "boost":1
                    }
                }
            }
        ]
    }
}

在上面的查询中,这意味着clause1clause3重要三倍,clause2clause2重要两倍,它不是简单地乘以3 },2,因为在计算分数时,因为分数有规范化

如果您只使用boost查询一个查询子句,那么它就没用了。

使用提升的使用方案:

使用标题内容字段设置的一组页面文档。

您希望使用某些字词搜索标题内容,并认为标题内容搜索这些文件时。因此,您可以将标题查询条款设置为超过内容。例如,如果您的查询通过标题字段点击一个文档,而按内容字段点击一个文档,并且您想要先点击标题字段的文档到内容字段文档。所以提升可以帮助你做到这一点。