#elasticsearch #full-text-search
#elasticsearch #полнотекстовый поиск
Вопрос:
Я использую простой поиск в Elasticsearch, но я хотел бы увеличить значение определенного URL-адреса, чтобы он отображался первым в результатах поиска. Я не уверен, возможно ли это?
Вот мое отображение.
"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
них был первым в результатах поиска. Возможно ли это вообще в Elasticsearch? В противном случае мне пришлось бы получать все и фильтровать в коде вместо этого.
Ответ №1:
Вы можете добавить 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
}
}
}
]
}
}
}
Ответ №2:
У вас может быть запрос регулярных выражений в предложении should с высоким повышением. Попробуйте выполнить следующий запрос
{
"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
}
}
]
}
}
}