Использование поля вместо "_id" для запроса типа more-like-this - PullRequest
0 голосов
/ 04 июня 2019

У меня есть поле slug, которое я хочу использовать для идентификации объекта, который будет использоваться как ссылка вместо поля "_id".Но вместо того, чтобы использовать его в качестве ссылки, doc, кажется, использует его как запрос для сопоставления.Поскольку slug является уникальным полем с простым анализатором, оно просто возвращает ровно один результат, подобный следующему.Насколько я знаю, нет никакого способа использовать настраиваемое поле в качестве поля _id: https://github.com/elastic/elasticsearch/issues/6730

Так что это двойной поиск, сначала выясняется идентификатор упругого поиска, а затем выполняется more_like_this единственный способ добиться того, чтоЯ ищу? Кто-то, кажется, задал подобный вопрос три года назад, но у него нет ответа.

ArticleDocument.search().query("bool",
                                should=Q("more_like_this",
                                        fields= ["slug", "text"],
                                        like={"doc": {"slug": "OEXxySDEPWaUfgTT54QvBg",
                                        }, "_index":"article", "_type":"doc"},
                                        min_doc_freq=1,
                                        min_term_freq=1
                                        )
                                ).to_queryset()

Возвращает:

<ArticleQuerySet [<Article: OEXxySDEPWaUfgTT54QvBg)>]>

1 Ответ

0 голосов
/ 05 июня 2019

Вы можете сделать некоторые из ваших документов полем "по умолчанию" _id при приеме данных.

Logstash

output {
    elasticsearch {
        hosts => ["localhost:9200"]
        index => "my_name"
        document_id => "%{some_field_id}"
    }
}

Spark (Scala)

DF.saveToEs("index_name" + "/some_type", Map("es.mapping.id" -> "some_field_id"))

Индекс API

PUT twitter/_doc/1
{
    "user" : "kimchy",
    "post_date" : "2009-11-15T14:12:12",
    "message" : "trying out Elasticsearch"
}

{
    "_shards" : {
        "total" : 2,
        "failed" : 0,
        "successful" : 2
    },
    "_index" : "twitter",
    "_type" : "_doc",
    "_id" : "1",
    "_version" : 1,
    "_seq_no" : 0,
    "_primary_term" : 1,
    "result" : "created"
}
...