2015-10-22 34 views
1

我一直在想出令牌處理器/令牌過濾器和分析器的正確組合,以利用elasticsearch來匹配URL。在elasticsearch中爲URL字符串生成匹配

不幸的是,似乎我所採取的每種方法都未能找到一個或兩個邊緣案例。我希望有人在那裏或許可以揭示一些輕如下:

如果我已經存儲在elasticsearch以下值:

  1. http://www.example111.com
  2. http://www.example111.com/cats
  3. http://www.example111.com/cats?type=tabby
  4. http://www.example111.com/cats/dogs
  5. http://www.example111.com/dogs/cats
  6. http://www.example222.com/cats
  7. http://www.example222.com
  8. http://www.example222.com/cats/dogs
  9. http://www.example333.com/fish

我想知道我可以使用什麼樣的查詢生成以下搜索字符串和結果集組合(依相關程度排序):

這裏表達的總體思路是,結果按照與輸入的相似程度排序,直到tld和scheme。當查詢字符串不匹配或段不匹配時,結果將被丟棄。

+1

根據該查詢示例111/dogs應返回example111.com/dogs/cats,但查詢example222.com/cats不應返回example222.com/cats/dogs。我認爲http://www.example111.com/dogs [5,1]的例子似乎與其他的不一致。 – eemp

+0

啊,是的,謝謝!修訂。 –

+0

只是想知道你是否看過這個? http://stackoverflow.com/questions/18977834/indexing-website-url-in-elastic-search這似乎很有用。 –

回答

1

這個怎麼樣:

1)。當你存儲的URL,URL數據是一個對象,看起來像:

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

我不認爲你需要這些來進行分析......但是,很可能需要更多的思考。 2)。當你必須查詢這些記錄時,你將類似地解析url查詢。 3)。編造適合您需求的查詢 - 所以:

  • TLD必須在結果完全
  • 相符的路徑必須在查詢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 
         } 
        } 
       } 
      ] 
     } 
    } 
} 

如果每個記錄多個網址,看看嵌套對象和嵌套查詢。

無論如何,這一切只是一個可能的想法...這不是一個簡單的快速查詢,你可能一直希望。

+0

如果存在查詢字符串,則可能需要整個URL 100%匹配。所以我不擔心這個,我只是提交一個確切的字符串搜索。 –