我有一些Elasticsearch索引,在搜索时我的映射是未知的。我使用以下命令执行AND搜索单词“lorem”和“ipsum”:
GET /_search
{
"query": {
"query_string" : {
"query" : "lorem AND ipsum"
}
}
}
这里的好处是搜索是在索引中的所有字段中执行的。现在,一些索引有一个名为“title”的字段,我想提升这些字段以使它们更具相关性。但当然,只有当它们存在时。我试图使用“query_string”子句的参数,但我能够提升“标题”字段的唯一方法是使用以下查询:
GET /_search
{
"query": {
"query_string" : {
"fields": ["title^2"],
"query" : "lorem AND ipsum"
}
}
}
这导致“query_string”子句只搜索“title”字段而不搜索其他字段 - 并且记住,我不知道这些其他字段是什么。如果与“fields”参数一起使用,则在“default_field”参数中使用通配符只会导致异常。
所以基本上我想告诉Elasticsearch:
搜索“lorem”和“ipsum”,如果找到则将结果排名更高 他们在一个名为“title”的领域
我将如何实现这样的目标?
答案 0 :(得分:0)
我认为你要找的是function_score
GET /_search
{
"query": {
"function_score": {
"field_value_factor": {
"field": "title",
"factor": "2",
"modifier": "multiply",
"missing": 1
}
}
}
}
答案 1 :(得分:0)
while" field_value_factor"是一个死胡同," function_score"带领我朝着正确的方向前进。这是我(原则上)最终使用的查询:
spring.datasource.url
它将搜索所有索引中的所有字段以查找单词" lorem"和" ipsum"如果这些单词都在名为" name"的字段中找到,则搜索匹配的分数加倍。