针对多个字段的文本查询

时间:2012-06-30 20:20:20

标签: elasticsearch

如何针对多个字段使用text_phrase查询?

我的情况:
用户类型hello world。标题或内容(或两者)字段包含hello (cool) world - >返回此文件

1 个答案:

答案 0 :(得分:4)

您可以使用boost查询来执行此操作。您可能希望使用text查询的更高级形式以提供标题的提升(有时,禁用标题文档的规范也是有意义的,这会使字段的长度影响评分)。以下是完整示例:

curl -XPUT localhost:9200/test -d '{
    "index.number_of_shards" : 1,
    "index.number_of_replicas" : 0
}'

curl -XPUT localhost:9200/test/type/1 -d '{
    "title" : "hello (cool) world",
    "content" : "hello (cool) world"
}'

curl -XPUT localhost:9200/test/type/2 -d '{
    "title" : "hello (cool) world",
    "content" : "xxx"
}'

curl -XPUT localhost:9200/test/type/3 -d '{
    "title" : "yyy",
    "content" : "hello (cool) world"
}'

curl -XPOST localhost:9200/test/_refresh

curl -XGET localhost:9200/test/_search?pretty -d '{
    "query" : {
        "bool" : {
            "should" : [
                {
                    "text" : {"content" : {"query" : "hello world"}}
                },
                {
                    "text" : {"title" : {"query" : "hello world", "boost" : 5}}
                }
            ]
        }
    }
}'