我一直在尝试使用令牌化程序/令牌过滤器和分析器的正确组合来利用弹性搜索来匹配网址。
不幸的是,似乎我到目前为止采用的每种方法都错过了一两个边缘情况。我希望那里的某个人可以对以下内容有所了解:
如果我在elasticsearch中存储了以下值:
我想知道我可以用什么查询生成以下搜索字符串和结果集组合(按相关性得分排序):
http://www.example111.com/cats/dogs
[4,2,3,1]
这里表达的一般想法是,结果按照它们与输入的相似程度进行排序,一直到tld和scheme。当整个查询字符串不匹配或段不匹配时,将丢弃结果。
答案 0 :(得分:1)
这个怎么样:
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
}
}
}
]
}
}
}
如果每条记录有多个网址,请查看嵌套对象和嵌套查询。
无论如何,所有这些只是一个可能的想法......这不是你可能希望的一个方便的快速查询。