Elasticsearch 全文搜索

全文搜索

  • match
    • operator 提高精度
    • minimum_should_match 控制精度
  • bool 组合查询
    • must 必须匹配
    • must_not 必须不匹配
    • should 如果有 must 则表示没有必须匹配但有会更匹配,如果没有 must 则表示至少需要有一个匹配
    • minimum_should_match 控制多少个 should 需要匹配
  • boost 控制权重

示例数据

curl -X DELETE -H 'Content-Type: application/json' -k -u elastic:KJNQ2rMeC481nFwSsqyf "https://localhost:9200/my_index"
curl -X PUT -H 'Content-Type: application/json' -k -u elastic:KJNQ2rMeC481nFwSsqyf "https://localhost:9200/my_index" -d'
{
    "settings": {
        "number_of_shards": 1
    }
}
'
curl -X POST -H 'Content-Type: application/json' -k -u elastic:KJNQ2rMeC481nFwSsqyf "https://localhost:9200/my_index/_bulk" -d'
{ "index": { "_id": 1 }}
{ "title": "The quick brown fox" }
{ "index": { "_id": 2 }}
{ "title": "The quick brown fox jumps over the lazy dog" }
{ "index": { "_id": 3 }}
{ "title": "The quick brown fox jumps over the quick dog" }
{ "index": { "_id": 4 }}
{ "title": "Brown fox brown dog" }
'
curl -X GET -H 'Content-Type: application/json' -k -u elastic:KJNQ2rMeC481nFwSsqyf "https://localhost:9200/my_index/_search?pretty"

单个词查询

curl -X GET -H 'Content-Type: application/json' -k -u elastic:KJNQ2rMeC481nFwSsqyf "https://localhost:9200/my_index/_search?pretty" -d'
{
    "query": {
        "match": {
            "title": "quick"
        }
    }
}
'

多个词查询

匹配 brown 或 dog

curl -X GET -H 'Content-Type: application/json' -k -u elastic:KJNQ2rMeC481nFwSsqyf "https://localhost:9200/my_index/_search?pretty" -d'
{
    "query": {
        "match": {
            "title": "brown dog"
        }
    }
}
'

提高精度

必须同时匹配 brown 和 dog (operator的默认值是 or)

curl -X GET -H 'Content-Type: application/json' -k -u elastic:KJNQ2rMeC481nFwSsqyf "https://localhost:9200/my_index/_search?pretty" -d'
{
    "query": {
        "match": {
            "title": {
                "query": "brown dog",
                "operator": "and"
            }
        }
    }
}
'

控制精度

minimum_should_match 支持数值,表示需要匹配的词项数;或者百分比值

curl -X GET -H 'Content-Type: application/json' -k -u elastic:KJNQ2rMeC481nFwSsqyf "https://localhost:9200/my_index/_search?pretty" -d'
{
    "query": {
        "match": {
            "title": {
                "query": "quick brown dog",
                "minimum_should_match": "75%"
            }
        }
    }
}
'

组合查询

必须包含 quick,必须不包含 lazy,如果包含 brown dog 相关度会更高

curl -X GET -H 'Content-Type: application/json' -k -u elastic:KJNQ2rMeC481nFwSsqyf "https://localhost:9200/my_index/_search?pretty" -d'
{
    "query": {
        "bool": {
            "must": {"match": {"title": "quick"}},
            "must_not": {"match": {"title": "lazy"}},
            "should": [
                {"match": {"title": "brown"}},
                {"match": {"title": "dog"}}
            ]
        }
    }
}
'

控制精度

minimum_should_match 至少有多少个 should 需要匹配

curl -X GET -H 'Content-Type: application/json' -k -u elastic:KJNQ2rMeC481nFwSsqyf "https://localhost:9200/my_index/_search?pretty" -d'
{
    "query": {
        "bool": {
            "should": [
                {"match": {"title": "brown"}},
                {"match": {"title": "fox"}},
                {"match": {"title": "dog"}}
            ],
            "minimum_should_match": 2
        }
    }
}
'

提升权重

必须包含 brown dog,如果有 quick fox 会更匹配

curl -X GET -H 'Content-Type: application/json' -k -u elastic:KJNQ2rMeC481nFwSsqyf "https://localhost:9200/my_index/_search?pretty" -d'
{
    "query": {
        "bool": {
            "must": {
                "match": {
                    "title": {
                        "query": "brown dog",
                        "operator": "and"
                    }
                }
            },
            "should": [
                {"match": {"title": "quick"}},
                {"match": {"title": "fox"}}
            ]
        }
    }
}
'

必须包含 brown dog,如果有 quick fox 会更匹配;quick 权重更高,fox 权重比默认高(默认为1)

boost == 1 默认,boost > 1 权重更高,boost > 0 and boost < 1 权重更低

curl -X GET -H 'Content-Type: application/json' -k -u elastic:KJNQ2rMeC481nFwSsqyf "https://localhost:9200/my_index/_search?pretty" -d'
{
    "query": {
        "bool": {
            "must": {
                "match": {
                    "title": {
                        "query": "brown dog",
                        "operator": "and"
                    }
                }
            },
            "should": [
                {"match": {"title": {"query": "quick", "boost": 2}}},
                {"match": {"title": {"query": "fox", "boost": 1}}}
            ]
        }
    }
}
'
posted @ 2024-10-09 19:39  廖子博  阅读(6)  评论(0编辑  收藏  举报