6

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

映射:

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

数据:

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

询问:

发布 /authors/_suggest

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

要求是:

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

任何想法我怎样才能实现这些?

4

1 回答 1

3

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

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
                }
            ]
        }
    ]
}

过滤器不适用于建议。要实现某种过滤,您可以查看这篇关于在建议中使用上下文的博客文章。

于 2015-01-27T10:45:25.627 回答