2013-10-21 181 views
1

我正在對象上創建索引,並希望能夠同時執行全部詞組搜索和部分匹配。類型被稱爲「宣誓人」,和簡化的索引創建如下所示:爲詞組搜索和部分匹配搜索字段

{ 
    "deponent": { 
     "properties": {   
     "name": { 
      "type": "multi_field", 
      "fields": { 
       "name": { 
        "type": "string" 
       }, 
       "full": { 
        "type": "string", 
        "index": "not_analyzed", 
        "omit_norms": true, 
        "index_options": "docs", 
        "include_in_all": false 
       } 
      } 
     } 
     } 
    } 
} 

這樣做的意圖是指數在「名稱」字段中的值兩次:一次,其中字段內的各個字是沒有被分解(name.full),並且一旦單詞被分解(name.name)。

我有一個索引文件,其名稱字段設置爲「Dr. Danny Watson」。我希望執行一個術語查詢(其查詢字符串根據文檔不分析)時,會出現以下行爲:

  1. 在搜索時使用「丹尼·華生醫生」 name.full,記錄 應該返回
  2. 當搜索name.full利用 「沃森」,記錄不應該返回
  3. 當搜索name.name使用「Dr.丹尼·沃森」,記錄不應該返回
  4. 當使用搜索name.name‘沃森’,記錄應該以上恢復

的查詢爲四點:

1 - 按預期工作(返回該記錄)

{ 
    "query" : { 
     "term": { 
      "name.full": { 
       "value": "Dr. Danny Watson" 
      } 
     } 
    } 
} 

2 - 按預期工作(不ñ OT返回記錄)

{ 
    "query" : { 
     "term": { 
      "name.full": { 
       "value": "Watson" 
      } 
     } 
    } 
} 

3 - 按預期工作(不返回記錄)

{ 
    "query" : { 
     "term": { 
      "name.name": { 
       "value": "Dr. Danny Watson" 
      } 
     } 
    } 
} 

4 - 確實如預期工作 - 記錄不返回

{ 
    "query" : { 
     "term": { 
      "name.name": { 
       "value": "Watson" 
      } 
     } 
    } 
} 

所以看來我對事物的理解是有缺陷的。我錯過了什麼?

+0

您使用哪些分析儀?您的索引和搜索分析器可能不同嗎?嘗試在name.name字段中查找「watson」(全部用小寫字母)。那會帶來結果嗎? –

+0

以上是完整的索引創建和搜索請求。因此除指定之外,正在使用默認值。將搜索查詢文本更改爲小寫不會改變任何內容。 – ryanmcfall

+0

啊,你不需要調用字段「name.name」。具有原始名稱的多字段用作默認值,因此您應該只使用「名稱」。 –

回答

1

您不需要調用字段「name.name」。具有原始名稱的多字段用作默認值,因此您應該只使用「名稱」。
此外,確保索引和搜索分析程序的順序總是很好(例如,您的索引條目和搜索詞都會更改爲小寫)。