1

我想将 uri 存储在映射中,并希望通过以下方式使其可搜索:

  • 完全匹配(即如果我存储:http://stackoverflow.com/questions然后查找该术语http://stackoverflow.com/questions检索该项目。

  • 有点像字母标记器,所有“单词”都应该是可搜索的。所以搜索任何一个questionsstackoverflow或者可能com会带来http://stackoverflow.com/questions一个热门​​。

  • 寻找 '。' 或 '/' 分隔的 url 片段应该仍然可以搜索。因此,搜索stackoverflow.com将带回来http://stackoverflow.com/questions作为一个打击。

  • 应该不区分大小写。(如小写)

  • ,html://等对于搜索是可选的htmls://www.因此,搜索其中一个http://stackoverflow.comstackoverflow.com将带回http://stackoverflow.com/questions一个热门。

也许解决方案应该是链接标记器或类似的东西。我对 ES 很陌生,所以这可能是一个微不足道的问题。那么我应该使用/构建什么样的分析器来实现这个功能呢?

任何帮助将不胜感激。

4

1 回答 1

1

你是绝对正确的。您需要将字段类型设置为multi_field,然后为每个场景创建分析器。在核心,您可以执行multi_match查询:

=============type properties===============
{
    "fun_documents": {
        "properties": {
            "url": {
                "type": "multi_field",
                "fields": {
                    "keyword": {
                        "type": "string",
                        "analyzer": "keyword"
                    },
                    "alphanum_only": {
                        "type": "string",
                        "analyzer": "my_custom_alpha_num_analyzer"
                    },
                    {
                        "etc": "etc"
                    }
                }
            }
        }
    }
}

==================query=====================
{
    "query": {
        "multi_match": {
            "query": "stackoverflow",
            "fields": [
                "url.keyword",
                "url.alphanum_only",
                "url.optional_fun"
            ]
        }
    }
}

请注意,您可以使用 multi_field 别名并重用相同的名称,但这是简单的演示。

于 2013-10-02T12:57:34.113 回答