2014-07-03 44 views
1

假設我有一個文本的句子,並希望找到所有文件,其中字段X在該句子中找到。如何做「包含在」使用ElasticSearch

例子:

「敏捷的棕色狐狸跳過了懶狗」是我的句子。

我有3個文件。每個人都有所謂的關鍵字單場:

  • 1,關鍵字=狐狸
  • 2,關鍵字=狗
  • 3,關鍵詞=貓

我想運行,檢查是否查詢關鍵字出現在提供的值中,所以1和2會匹配,但3不會。

我檢查了文檔,並認爲我可以用「fuzzy_like_this」來做到這一點,但它返回的文檔甚至沒有「關鍵字」字段。

任何人都可以指向正確的方向嗎?

回答

1

使用查詢分析器與適當的分析,像剛纔搜索一下:

Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_48); 
QueryParser parser = new QueryParser(Version.LUCENE_48, "keyword", analyzer); 
Query query = parse.parse("The quick brown fox jumped over the lazy dog"); 
int maxHits = 10; //Or however many you want 
TopDocs topdocs = indexSearcher.search(query, maxHits); 

上面的查詢將搜索存在於關鍵詞字段中的每個學期,所以查詢看起來像(的是停止詞,默認情況下,因此將被淘汰):

keyword:quick keyword:brown keyword:fox keyword:over keyword:lazy keyword:dog 

在elasticsearch,等效爲query string query

{ 
    "query_string" : { 
     "default_field" : "keyword", 
     "query" : "The quick brown fox jumped over the lazy dog" 
    } 
} 
+0

Muchos gracias。這看起來正是我需要的。從query_string描述中看起來並不明顯,但將其付諸實踐可以完美實現。 – Maloric