elasticsearch学习笔记三

Posted by Peterliao Blog on June 30, 2017

多字段搜索

多字符串查询

查询子句的权重取决于子句的位置,位于二层bool的子句权重

单字符串查询

了解数据才能构建单字符串查询 单字符查询时数据有三种情形

  • 最佳字段:短语如何分词去匹配,词组匹配调整匹配度 当搜索词语具体概念的时候,比如 “brown fox” ,词组比各自独立的单词更有意义。像 title 和 body 这样的字段,尽管它们之间是相关的,但同时又彼此相互竞争。文档在 相同字段 中包含的词越多越好,评分也来自于 最匹配字段 。
  • 多数字段:在多个字段上进行匹配,调整匹配度 为了对相关度进行微调,常用的一个技术就是将相同的数据索引到不同的字段,它们各自具有独立的分析链。主字段可能包括它们的词源、同义词以及 变音词 或口音词,被用来匹配尽可能多的文档。

相同的文本被索引到其他字段,以提供更精确的匹配。一个字段可以包括未经词干提取过的原词,另一个字段包括其他词源、口音,还有一个字段可以提供 词语相似性 信息的瓦片词(shingles)。

其他字段是作为匹配每个文档时提高相关度评分的 信号 , 匹配字段越多 则越好。

  • 混合字段:一个字段包含多个字段,搜索一个相当于搜多个,调整匹配度 对于某些实体,我们需要在多个字段中确定其信息,单个字段都只能作为整体的一部分:Person: first_name 和 last_name (人:名和姓)

在这种情况下,我们希望在 任何 这些列出的字段中找到尽可能多的词,这有如在一个大字段中进行搜索,这个大字段包括了所有列出的字段。

最佳字段

dis_max查询:分离 最大化查询(Disjunction Max Query),分离(Disjunction)的意思是 或(or) ,这与可以把结合(conjunction)理解成 与(and) 相对应。分离最大化查询(Disjunction Max Query)指的是: 将任何与任一查询匹配的文档作为结果返回,但只将最佳匹配的评分作为查询的评分结果返回 :

{
    "query": {
        "dis_max": {
            "queries": [
                { "match": { "title": "Brown fox" }},
                { "match": { "body":  "Brown fox" }}
            ]
        }
    }
}

最佳字段查询调优

tie_breaker参数 可以通过tie_breaker参数将其他匹配语句的评分也考虑进来

{
    "query": {
        "dis_max": {
            "queries": [
                { "match": { "title": "Quick pets" }},
                { "match": { "body":  "Quick pets" }}
            ],
            "tie_breaker": 0.3
        }
    }
}

多数字段

希望将所有匹配字段的评分合并起来,所以使用 most_fields 类型

短语匹配

match_phrase