Elasticsearch в golang не дает никаких результатов, используя оливково-эластичный пакет - PullRequest
0 голосов
/ 21 октября 2019

Я пытаюсь реализовать эластичный поиск в моем приложении go. Я использую библиотеку https://github.com/olivere/elastic для go, иasticsearch запущен в Docker-контейнере.

Я успешно подключился кasticsearch и создал индекс, после чего я попытался сохранить данные вasticsearch, который также был успешным. У меня начались проблемы, когда я выполнял запросы

Мое отображение выглядит следующим образом

    "mappings":{
        "item":{
            "properties":{
                "id":{
                    "type":"integer"
                },
                "title":{
                    "type":"text"
                },
                "description":{
                    "type":"text"
                },
                "userid":{
                    "type":"integer"
                }
            }
        }
    }

Я пытаюсь запросить es по названию, как это, и я получаю пустой ответ. Если я удаляю запрос из поиска (), перечисляются все сохраненные элементы. Я попытался также объединить с newBoolQuery и newMatchPhrase, он также возвращал пустой ответ.

query := elastic.NewTermQuery("title", "Hello there")
searchResult, err := elasticClient.Search().
    Index("items").
    Query(query).
    Pretty(true).
    Do(ctx)
if err != nil {
    return nil, err
}
return searchResult, nil

Ответ:

 {
    "id": 81,
    "message": "Search successfull",
    "data": {
        "took": 1,
        "_scroll_id": "",
        "hits": {
            "total": 0,
            "max_score": null,
            "hits": []
        },
        "suggest": null,
        "aggregations": null,
        "timed_out": false,
        "_shards": {
            "total": 1,
            "successful": 1,
            "failed": 0
        }
    }
}

1 Ответ

1 голос
/ 21 октября 2019

Я думаю, вам следует использовать NewMatchQuery в вашем случае, как сказано в документации для термин запроса

Избегайте использования термина запрос для текстовых полей.

По умолчанию Elasticsearch изменяет значения текстовых полей как часть анализа. Это может затруднить поиск точных совпадений для значений текстовых полей.

Для поиска значений текстовых полей используйте вместо этого запрос на совпадение.

Вы не предоставили доступ к образцам документов, которые проиндексировали, и чтоВы пытаетесь найти, но что-то вроде ниже должно помочь в вашем случае

query := NewMatchQuery("title", "Hello there")

Надеюсь, что поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...