小编Dav*_*son的帖子

ElasticSearch短语前缀搜索 - 如何获取匹配的短语?

我正在使用ElasticSearch构建自动完成功能.当用户输入时,我想显示数据的完成列表,因此用户可以选择一个.例如,如果数据包含以下短语:

very unusual
very unlikely
very useful
Run Code Online (Sandbox Code Playgroud)

和用户类型:

very u
Run Code Online (Sandbox Code Playgroud)

我想显示上面的短语.

我正在使用此查询:

  "query": {
    "multi_match": {
      "query": "very u",
      "fields": [
        "name",
        "description",
        "contentBlocks.caption",
        "contentBlocks.text"
      ],
      "type": "phrase_prefix",
      "max_expansions": 10,
      "cutoff_frequency": 0.001
    }
Run Code Online (Sandbox Code Playgroud)

这与我正在寻找的内容相匹配,但从搜索结果中提取匹配的短语非常尴尬.我一直在使用突出显示,我通过解析突出显示来收集匹配的短语.例如:

    "highlight": {
      "contentBlocks.text": [
        "turned the <em>very</em> <em>unusual</em> doorknob"
      ]
    }

    "highlight": {
      "contentBlocks.text": [
        "invented a <em>very</em> <em>useful</em> mechanism"
      ]
    }
Run Code Online (Sandbox Code Playgroud)

这样做的正确方法是什么?


"Phrase Suggester"可能能够完成我所描述的内容,但你怎么做到这一点并不明显.

我已将感兴趣的字段(例如"描述")编入索引,如下所示:

  "description" : {
    "index_analyzer" : "snowball_stem",
    "search_analyzer" : "snowball_stem",
    "type" : "string",
    "fields" : {
      "autocomplete" : {
        "index_analyzer" : …
Run Code Online (Sandbox Code Playgroud)

autocomplete elasticsearch

6
推荐指数
1
解决办法
4070
查看次数

ElasticSearch:过滤深层嵌套数据

我们的数据存储在MongoDB 2.4.8中,并使用ElasticSearch MongoDB River 1.7.3索引到ElasticSearch 0.90.7.

我们的数据索引正确,我可以成功搜索我们想要搜索的字段.但我还需要过滤权限 - 当然我们只想返回调用用户实际可以读取的结果.

在我们服务器上的代码中,我将调用用户的授权作为数组,例如:

[ "Role:REGISTERED_USER", "Account:52c74b25da06f102c90d52f4", "Role:USER", "Group:52cb057cda06ca463e78f0d7" ]
Run Code Online (Sandbox Code Playgroud)

我们正在搜索的单位数据的示例如下:

{
    "_id" : ObjectId("52dffbd6da06422559386f7d"),
    "content" : "various stuff",
    "ownerId" : ObjectId("52d96bfada0695fcbdb41daf"),
    "acls" : [
        {
            "accessMap" : {},
            "sourceClass" : "com.bulb.learn.domain.units.PublishedPageUnit",
            "sourceId" : ObjectId("52dffbd6da06422559386f7d")
        },
        {
            "accessMap" : {
                "Role:USER" : {
                    "allow" : [
                        "READ"
                    ]
                },
                "Account:52d96bfada0695fcbdb41daf" : {
                    "allow" : [
                        "CREATE",
                        "READ",
                        "UPDATE",
                        "DELETE",
                        "GRANT"
                    ]
                }
            },
            "sourceClass" : "com.bulb.learn.domain.units.CompositeUnit",
            "sourceId" : ObjectId("52dffb54da06422559386f57")
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

在上面的示例数据中,我已将所有可搜索的内容替换为 "content" …

elasticsearch

4
推荐指数
1
解决办法
4999
查看次数

标签 统计

elasticsearch ×2

autocomplete ×1