【问题标题】:elasticsearch completion suggest on multifield弹性搜索完成建议多字段
【发布时间】:2014-09-19 11:15:40
【问题描述】:

我正在尝试从多字段中获取建议。我找不到这样的例子,所以也许这不是最好的主意,但我对你的意见很感兴趣。

映射:

发布/作者 { “映射”:{ “作者”: { “特性”: { “姓名”: { “类型”:“多字段”, “字段”:{ “姓名”: { “类型”:“字符串”, “索引”:“已分析” }, “交流”:{ “类型”:“完成”, “index_analyzer”:“简单”, "search_analyzer": "简单", “有效载荷”:真 } } } } } } }

数据:

发布/作者/作者/1 { “名称”:“费奥多尔·陀思妥耶夫斯基” }

查询:

发布 /authors/_suggest { “作者自动完成”:{ “文本”:“fyodor”, “完成”:{ “字段”:“名称.ac” } } }

要求是:

  • get 查询适用于文本“fyodor”,也适用于“dostoevsky”,此示例仅适用于“fyodor”
  • 可以过滤建议

有什么想法可以实现这些吗?

【问题讨论】:

  • 从映射中移除 index_analyzer 和 search_analyzer 。只保留类型完成..
  • 结果没有任何改变

标签: elasticsearch search-suggestion


【解决方案1】:

首先,建议器在多领域中效果不佳,因此您可能希望将其放在外面。 其次,为了让您同时使用姓名和名字进行查询,您必须在索引数据时选择输出/输入。

SENSE 的工作代码示例:

POST authors

PUT authors/_mapping/author
{
    "properties" : {
        "name" : { "type" : "string" },
        "suggest" : { "type" : "completion"}
    }
}

POST authors/author/1
{
    "name": "Fyodor Dostoevsky",
    "suggest": {
        "input": ["Dostoevsky", "Fyodor"],
        "output": "Fyodor Dostoevsky"
    }
}

POST authors/_suggest
{
    "authorsAutocomplete": {
        "text": "d",
        "completion": {
            "field": "suggest"
        }
    }
}

DELETE authors

结果:

{
    "_shards": {
        "total": 5,
        "successful": 5,
        "failed": 0
    },
    "authorsAutocomplete": [
        {
            "text": "d",
            "offset": 0,
            "length": 1,
            "options": [
                {
                    "text": "Fyodor Dostoevsky",
                    "score": 1
                }
            ]
        }
    ]
}

过滤器不适用于建议。要实现某种过滤,您可以查看 blog post 关于在建议中使用上下文的信息。

【讨论】:

  • 感谢您的回答。是否可以像常规查询一样对姓名和名字应用不同的权重?
  • 嗨@Harry。详细解释这一点超出了这个问题的范围,并且会使这个问题变得非常混乱。您可以查看here 或提出新问题并请我回答。问候, Heschoon
  • 非常感谢,@Heschoon!这篇文章很有帮助,但我仍然不确定如何让它专门用于完成建议。有没有机会回复我的question
  • 完成@Harry。我希望它对你有帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-15
  • 1970-01-01
  • 1970-01-01
  • 2017-06-28
  • 1970-01-01
相关资源
最近更新 更多