elasticsearch - 在Elasticsearch中生成URL字符串的匹配项

标签 elasticsearch

我一直在尝试将标记器/标记过滤器和分析器的正确组合,以利用Elasticsearch来匹配URL。

不幸的是,到目前为止,我采取的每种方法似乎都错过了一两个极端情况。我希望外面有人可以对以下内容有所了解:

如果我将以下值存储在elasticsearch中:

  • http://www.example111.com
  • http://www.example111.com/cats
  • http://www.example111.com/cats?type=tabby
  • http://www.example111.com/cats/dogs
  • http://www.example111.com/dogs/cats
  • http://www.example222.com/cats
  • http://www.example222.com
  • http://www.example222.com/cats/dogs
  • http://www.example333.com/fish

  • 我想知道我可以使用什么查询来生成以下搜索字符串和结果集组合(按相关性得分排序):
  • http://www.example111.com/cats/dogs[4,2,3,1]
  • http://www.example111.com/cats?type=birman[2,1]
  • http://www.example111.com/dogs[1]
  • http://www.example222.com/cats[6,7]
  • http://www.example333.com[]

  • 这里表达的一般想法是,结果按照它们与输入的相似程度进行排序,一直到tld和scheme为止。当整个查询字符串不匹配或段不匹配时,结果将被丢弃。

    最佳答案

    这个怎么样:

    1)。当您存储网址时,网址数据是一个类似于以下内容的对象:

    {
        "tld" : "http://www.example111.com",
        "path" : "/cats",
        "qs" : "?type=birman"
    }
    

    我不认为您希望对这些进行分析...但是可能需要更多考虑。

    2)。当您必须查询这些记录时,您将类似地解析url查询。

    3)。连接符合您要求的查询-因此:
  • tld必须完全匹配
  • 结果中的
  • 路径必须是查询url中路径的子字符串-您可以使用查询时间分析器,该分析器将为您提供查询url中路径的所有可能的前缀子字符串(例如:给定的“/ cats / dogs” ,您想要的是“/”、“/c”、“/ca”、...、“/cats/dogs”),尽管这似乎效率不高……也许您可以像“/”,“/ cats”那样创建查询时,请先使用“,” // cats / dogs“,它们仅表示查询
  • 中的其他子句
  • 与查询字符串完全匹配吗?我不确定这里的全部要求。

  • 查询可能类似于(查询网址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/

    相关文章:

    node.js - 全文搜索的想法 MongoDB 和 node.js

    ruby-on-rails - elasticsearch中的批量数据删除

    elasticsearch - ELK-如何向特定索引的个人用户提供权限

    elasticsearch - Elasticsearch查询结果返回错误结果

    python-3.x - 通过从目录中读取所有.txt文件来创建一个JSON对象

    aggregate - Logstash与Collected集成

    elasticsearch - 在同一文本字段上同时使用术语和匹配查询?

    Elasticsearch 在启动时挂起

    elasticsearch - 嵌套类型字段内的字段聚合

    c# - 在SortFieldDescriptor中使用.Suffix