我在Elasticsearch中使用了一个简单的搜索,但我想给一个特定的网址一个提升,所以它会在搜索结果中首先出现。我不确定它是否可能?
这是我的映射。
"hal": {
"properties": {
"label": {
"type": "string",
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
},
"url": {
"type": "string",
"index": "not_analyzed"
},
这是我的查询
{
"fields": [ "url","brand"],
"query": {
"bool": {
"must": [{
"terms": {
"brand": ["brand"]
}
},{
"terms": {
"hal.label.raw": ["donald trump"]
}
}]
}
}
}
现在,当我搜索时,我会得到至少500个结果。但是,url
有一种特殊的模式,我想给它一个提升
http://www.anything.com/people/*
所以url
/people
.replace(/([A-Z])/g, ' $1').trim()
会出现在搜索结果中的第一位。这在Elasticsearch中甚至可以实现吗?否则我将不得不获取所有内容并在代码中过滤。
答案 0 :(得分:0)
您可以添加should
子句,该子句会自动提升所有匹配结果(确保url
设置为type: string
和index: not_analyzed
):
{
"fields": [
"url",
"brand"
],
"query": {
"bool": {
"must": [
{
"terms": {
"brand": [
"brand"
]
}
},
{
"terms": {
"hal.label.raw": [
"donald trump"
]
}
}
],
"should": [
{
"wildcard": {
"url": "http://www.anything.com/people/*"
}
}
]
}
}
}
您还可以指定特定的提升值:
{
"fields": [
"url",
"brand"
],
"query": {
"bool": {
"must": [
{
"terms": {
"brand": [
"brand"
]
}
},
{
"terms": {
"hal.label.raw": [
"donald trump"
]
}
}
],
"should": [
{
"wildcard": {
"url": {
"value": "http://www.anything.com/people/*",
"boost": 1
}
}
}
]
}
}
}
答案 1 :(得分:0)
你可以在具有高增强的should子句中拥有regex query。请尝试以下查询
{
"fields": [
"url",
"brand"
],
"query": {
"bool": {
"must": [
{
"terms": {
"brand": [
"brand"
]
}
},
{
"terms": {
"hal.label.raw": [
"donald trump"
]
}
}
],
"should": [
{
"regexp": {
"url": "http://www.anything.com/people/.*",
"boost" : 50
}
}
]
}
}
}