2015-06-30 68 views
6

我正在使用Nutch來抓取網站並將其索引到彈性搜索中。我的網站有元標籤,其中一些包含逗號分隔的ID列表(我打算用於搜索)。例如:在Elastic Search中索引逗號分隔值字段

contentTypeIds =「2,5,15」。 (注意:沒有方括號)。

當ES編制索引時,我無法搜索contentTypeIds:5並查找其contentTypeIds 包含 5的文檔;此查詢僅返回contentTypeIds完全爲「5」的文檔。但是,我確實希望查找contentTypeIds包含5的文檔。

在Solr中,這可以通過在schema.xml中將contentTypeIds字段設置爲multiValued =「true」來解決。我找不到如何在ES中做類似的事情。

我是ES新手,所以我可能錯過了一些東西。謝謝你的幫助!

回答

11

創建custom analyzer這將用逗號將索引文本拆分爲標記。

然後你可以嘗試搜索。如果你不關心相關性,你可以使用過濾器搜索你的文檔。我的示例顯示瞭如何嘗試使用term filter進行搜索。

下面你可以找到如何用sense插件來做到這一點。

DELETE testindex 

PUT testindex 
{ 
    "index" : { 
     "analysis" : { 
      "tokenizer" : { 
       "comma" : { 
        "type" : "pattern", 
        "pattern" : "," 
       } 
      }, 
      "analyzer" : { 
       "comma" : { 
        "type" : "custom", 
        "tokenizer" : "comma" 
       } 
      } 
     } 
    } 
} 

PUT /testindex/_mapping/yourtype 
{ 
     "properties" : { 
      "contentType" : { 
       "type" : "string", 
       "analyzer" : "comma" 
      } 
     } 
} 

PUT /testindex/yourtype/1 
{ 
    "contentType" : "1,2,3" 
} 

PUT /testindex/yourtype/2 
{ 
    "contentType" : "3,4" 
} 

PUT /testindex/yourtype/3 
{ 
    "contentType" : "1,6" 
} 

GET /testindex/_search 
{ 
    "query": {"match_all": {}} 
} 

GET /testindex/_search 
{ 
    "filter": { 
     "term": { 
      "contentType": "6" 
     } 
    } 
} 

希望它有幫助。

+0

工作正常,非常感謝! – Yann

+0

它也與Nutch索引一起工作! – Yann