2016-04-28 113 views
0

這就是我如何映射我的索引。ElasticSearch中的詞匹配

settings = new ConnectionSettings(pool) 
       .DefaultIndex(defaultIndex) 
       .MapDefaultTypeNames(m => m.Add(typeof(MyClass), "content")) 
       .PrettyJson() 
       .DisableDirectStreaming()); 

可以說我有索引到ES與

內容的文檔:「蒂姆·庫克透露在財報電話會議,在印度銷售iPhone 增長了56%,每年的基礎上,儘管公司第一個 全球銷售13年下滑。「現在

如果使用的是匹配查詢一個單詞用戶搜索

{ 
    "query": { 
    "match": { 
     "answer": { 
     "query": "decline" 
     } 
    } 
}} 

說,我得到一個得分0.047。

但與相同的查詢,如果我搜索單詞「下降」,我得到的得分爲0的我要檢查,如果這個詞是文檔還是沒有部分存在。我怎樣才能做到這一點?

回答

1

您需要定義您的字段映射,方法是聲明特定的分析器來分析您的內容字段。在這種情況下,我們可以使用english language analyzer,根據英語語法和詞法規則來阻止令牌。

PUT your_index 
{ 
    "mappings": { 
    "your_type": { 
     "properties": { 
     "content": { 
      "type": "string", 
      "analyzer": "english" 
     } 
     } 
    } 
    } 
} 

然後你可以檢索您的內容

PUT /your_index/your_type/1 
{ 
    "content": "Tim Cook revealed during the earnings call that iPhone sales in India grew by 56% on a yearly basis, despite the company's first global sales decline in 13 years." 
} 

終於可以同時搜索declinedeclining並獲得相同的分數

POST /your_index/_search 
{ 
    "query": { 
    "match": { 
     "content": { 
     "query": "decline" 
     } 
    } 
    } 
} 

POST /your_index/_search 
{ 
    "query": { 
    "match": { 
     "content": { 
     "query": "declining" 
     } 
    } 
    } 
} 
+0

但有可能改變現有的映射。因爲我已經有應用程序在運行。我如何將映射更改爲上面提到的映射? – ASN

+0

更改映射是不可能的。您可以刪除您現有的索引並使用我提供的映射重新創建索引。然後,您需要重新索引數據,即重新填充索引。 – Val

+0

謝謝val。你能幫我修改使用LINQ和分析器類型的映射嗎?我已經更新了問題中的索引映射。 TIA :) – ASN