我想将uri存储在映射中,我想通过以下方式搜索它:
完全匹配(即如果我存储了http://stackoverflow.com/questions
,那么查找术语http://stackoverflow.com/questions
会检索该项目。
像字母标记器一样,所有“单词”都应该是可搜索的。因此,搜索questions
,stackoverflow
或com
会使http://stackoverflow.com/questions
成为热门。
寻找'。'或'/'分隔的url片段应该仍然是可搜索的。因此,搜索stackoverflow.com
会将http://stackoverflow.com/questions
作为点击。
应该不区分大小写。 (如小写)
html://
,htmls://
,www.
等是可选的搜索。因此,搜索http://stackoverflow.com
或stackoverflow.com
会将http://stackoverflow.com/questions
作为点击。
也许解决方案应该像链接标记符或类似的东西。我对ES很陌生,所以这可能是一个微不足道的问题。 那么我应该使用什么样的分析器来构建这个功能呢?
任何帮助都会受到极大的关注。
答案 0 :(得分: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别名并重复使用相同的名称,但这只是简单的演示。