如何在弹性搜索中提升某些字段?

时间:2013-05-07 20:53:12

标签: boost elasticsearch field

我的目标是将提升应用于字段“name”(请参阅​​下面的示例),但在搜索“john”时遇到两个问题:

  1. 当名称为“dany”和
  2. 时,搜索也匹配{name: "dany", message: "hi bob"}
  3. 搜索不是提升消息的名称(名称=“john”的行应该在顶部)
  4. 要点是https://gist.github.com/tomaspet262/5535774

    (因为stackoverflow的表单提交已返回'您的帖子似乎包含未正确格式化为代码的代码',格式正确)。

2 个答案:

答案 0 :(得分:0)

我建议使用查询时间提升而不是索引时间提升。

#DELETE
curl -XDELETE 'http://localhost:9200/test'
echo
# CREATE
curl -XPUT 'http://localhost:9200/test?pretty=1' -d '{
    "settings": {
       "analysis" : {
            "analyzer" : {
               "my_analyz_1" : {
                    "filter" : [
                        "standard",
                        "lowercase",
                        "asciifolding"
                    ],
                    "type" : "custom",
                    "tokenizer" : "standard"
                }
            }
        }
    }
}'
echo
# DEFINE
curl -XPUT 'http://localhost:9200/test/posts/_mapping?pretty=1' -d '{
    "posts" : {
        "properties" : {
            "name" : {
              "type" : "string",
              "analyzer" : "my_analyz_1"
            },
            "message" : {
              "type" : "string",
              "analyzer" : "my_analyz_1"
            }
        }
    }
}'
echo
# INSERT
curl localhost:9200/test/posts/1 -d '{name: "john", message: "hi john"}'
curl localhost:9200/test/posts/2 -d '{name: "bob", message: "hi john, how are you?"}'
curl localhost:9200/test/posts/3 -d '{name: "john", message: "bob?"}'
curl localhost:9200/test/posts/4 -d '{name: "dany", message: "hi bob"}'
curl localhost:9200/test/posts/5 -d '{name: "dany", message: "hi john"}'
echo
# REFRESH
curl -XPOST localhost:9200/test/_refresh
echo
# SEARCH
curl "localhost:9200/test/posts/_search?pretty=1" -d '{
    "query": {
        "multi_match": {
            "query": "john",
            "fields": ["name^2", "message"]
        }
    }
}'

答案 1 :(得分:0)

我不确定这在这种情况下是否相关,但是在使用如此少量的数据进行测试时,我总是使用1个分片而不是默认设置来确保没有问题,因为分布式计算。