【问题标题】:Hibernate search : use Elastic Search decay_function in spatial() query?休眠搜索:在空间()查询中使用弹性搜索衰减函数?
【发布时间】:2018-08-16 21:04:44
【问题描述】:

我有不同的字段可供查询,例如标题、文本和位置。我想把更多的重量放在位置领域。我从 Elastic Search 中找到了 decay_function,根据这个例子,它完全满足了我的需求:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html#_detailed_example。 但是,我正在使用的系统使用 Hibernate Search 查询。我找到了 Spatial (https://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/#spatial) 过滤器,但有没有办法用衰变函数替换“within()”?还是通过个性化功能或类似的功能?

我知道我可以使用 within() 但这意味着我必须定义特定的范围。它可以工作,但在我的情况下它不是最佳解决方案。

【问题讨论】:

    标签: elasticsearch geolocation hibernate-criteria hibernate-search


    【解决方案1】:

    不使用 DSL 本身(目前,可以在 6 中将原生谓词集成到 DSL 中)。

    但是您可以按照我们的文档中的说明为这种特定情况创建原生 Elasticsearch 查询:https://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/#_queries

    FullTextEntityManager fullTextEm = Search.getFullTextEntityManager(entityManager);
    QueryDescriptor query = ElasticsearchQueries.fromJson(
        "{ 'query': { 'match' : { 'lastName' : 'Brand' } } }");
    List<?> result = fullTextEm.createFullTextQuery(query, GolfPlayer.class).getResultList();
    

    这样您就可以使用任何您认为合适的 Elasticsearch 结构。您仍然可以将 DSL 用于其他受支持的查询。

    与您的问题无关:我看到您是一名学生,您是否正在使用 Hibernate Search 进行学校项目?如果在法国学校教搜索,那就太好了:)。

    【讨论】:

    • 不,我目前在实习时使用它〜是的,我同意这一点; elastic+hibernate 很有趣,在这一年里我有几个 shcool 项目我们可以使用它。不过我想今年的课程已经很重了,所以老师们不得不做出选择,走一些捷径,在一节课上专注于一些点。顺便说一句,该解决方案似乎有效,但我在语法上苦苦挣扎。当它可以正常工作时,我会解决这个问题!
    • 如果您手动编写 JSON,jsonformatter.curiousconcept.com 可能会有所帮助。另一种选择是使用 JSON 库来编写它。您不需要它,但请记住,如果您需要它,您还可以获取底层 Elasticsearch 客户端并使用它做任何您想做的事情:docs.jboss.org/hibernate/stable/search/reference/en-US/…。这可能对聚合很有用,因为我们现在没有为它公开任何东西。
    • 设法使语法正确,但现在我的“比例”字段有问题。如示例中所示,我输入了“30km”,但我得到的只是一个 number_format_exception。这一定是因为我没有使用 Geo_Point,而是在我的对象中有属性双纬度和双经度(在标题、文本和所有内容旁边)。所以我使用了两次高斯衰减函数,一次在纬度上,一次在经度上(不确定它是否像这样工作,但现在不是问题)。 + 我用 (at)Longitude 和 (at)Latitude 索引了这些字段,但是当我用 ElasticsearchQueries.fromJson 调用 ES 时它仍然有用吗?
    • 我想避免使用 Geo_Point,因为我必须更改数据库表,从而在各处重构大量代码。但除了这个,我想不出任何解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-13
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多