我一直在尝试将标记器/标记过滤器和分析器的正确组合,以利用Elasticsearch来匹配URL。
不幸的是,到目前为止,我采取的每种方法似乎都错过了一两个极端情况。我希望外面有人可以对以下内容有所了解:
如果我将以下值存储在elasticsearch中:
我想知道我可以使用什么查询来生成以下搜索字符串和结果集组合(按相关性得分排序):
[4,2,3,1]
[2,1]
[1]
[6,7]
[]
这里表达的一般想法是,结果按照它们与输入的相似程度进行排序,一直到tld和scheme为止。当整个查询字符串不匹配或段不匹配时,结果将被丢弃。
最佳答案
这个怎么样:
1)。当您存储网址时,网址数据是一个类似于以下内容的对象:
{
"tld" : "http://www.example111.com",
"path" : "/cats",
"qs" : "?type=birman"
}
我不认为您希望对这些进行分析...但是可能需要更多考虑。
2)。当您必须查询这些记录时,您将类似地解析url查询。
3)。连接符合您要求的查询-因此:
查询可能类似于(查询网址http://www.example111.com/cats/dogs?type=birman):
{
"query" : {
"bool" : {
"must" : [
{
"match" : {
"url.tld" : "http://www.example111.com"
}
},
{
"match" : {
"url.qs" : "?type=birman"
}
}
]
"should" : [
{
"match" : {
"url.path" : {
"query" : "/",
"boost" : 1
}
}
},
{
"match" : {
"url.path" : {
"query" : "/cats",
"boost" : 2
}
}
},
{
"match" : {
"url.path" : {
"query" : "/cats/dogs",
"boost" : 3
}
}
}
]
}
}
}
如果每个记录有多个url,请查看嵌套对象和嵌套查询。
无论如何,所有这些只是一个可能的主意……这并不是您一直希望的一个便捷的快速查询。
关于elasticsearch - 在Elasticsearch中生成URL字符串的匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33281895/