ES 搜索算法

2020-02-28

布尔模型

在查询中使用 AND 、 OR 和 NOT

TF/IDF

tf(t in d) = √frequency

词 t 在文档 d 的词频( tf )是该词在文档中出现次数的平方根。

将参数 index_options 设置为 docs 可以禁用词频统计及词频位置,这个映射的字段不会计算词的出现次数,对于短语或近似查询也不可用。要求精确查询的 not_analyzed 字符串字段会默认使用该设置。

idf(t) = 1 + log ( numDocs / (docFreq + 1))

词 t 的逆向文档频率( idf )是:索引中文档数量除以所有包含该词的文档数,然后求其对数。

字段长度归一值

norm(d) = 1 / √numTerms

norm是字段中词数平方根的倒数

举例

example

vector space model

when search 'happy hippopotamus':

// of course 'hippopotamus' weighs more
happy hippopotamus => [2,5] (weight vectors)

then calculated in indices:

Document 1: (happy,____________)—[2,0]
Document 2: ( ___ ,hippopotamus)—[0,5]
Document 3: (happy,hippopotamus)—[2,5]

It appears that doc 3 is the most relevant one.


image.png

你可能感兴趣的:(ES 搜索算法)