2017-10-15 39 views
0

爲Azure搜索定義自定義分析器時,可以從this列表中定義一個令牌過濾器。 我正試圖支持搜索前綴和中綴。 例如:如果一個字段包含名稱:123 456,我想搜索的條件包含:在Azure搜索中創建一個支持雙方的EdgeNGram分析器

1 
12 
123 
23 
3 
4 
45 
456 
56 
6 

當使用這似乎這樣的伎倆在EdgeNGramTokenFilterV2,有確定了「邊」的選項財產,但只支持「前」和「後」,而不是兩者。 「前」(缺省)值,生成該列表:

1 
12 
123 
4 
45 
456 

和後生成:

123 
23 
3 
456 
56 
6 

我嘗試使用兩個令牌2個EdgeNGramTokenFilterV2s,但是這兩個濾波器組合如創建術語「2」或「5」:

1 
12 
123 
23 
3 
4 
45 
456 
56 
6 
2 // Unwanted 
5 // Unwanted 

我也嘗試使用「反向」的道理,但是這一切都顛倒,結果仍然是錯誤的。

我只使用一個搜索字段(「名稱」),並希望它保持這樣。 (想到可以使用不同分析器使用名爲「name_reverse」的不同字段的選項,但這樣做效率很低,並且在將搜索引擎連接到數據源時會導致很多頭痛的問題。是當前索引創建請求:

{ 
"name": "testindexboth", 
"fields": [ 
    {"name": "id", "type": "Edm.String", "key": true }, 
    {"name": "Name", "type": "Edm.String", "searchable": true, "analyzer": "myAnalyzer"} 
], 
"myAnalyzer": [ 
    { 
    "name": "myAnalyzer", 
    "@odata.type": "#Microsoft.Azure.Search.CustomAnalyzer", 
    "tokenizer": "standard_v2", 
    "tokenFilters":["front_filter", "back_filter"] 
    }], 

    "tokenFilters":[ 
      { 
       "name":"front_filter", 
       "@odata.type":"#Microsoft.Azure.Search.EdgeNGramTokenFilterV2", 
       "maxGram":15, 
       "side": "front" 
      }, 
         { 
       "name":"back_filter", 
       "@odata.type":"#Microsoft.Azure.Search.EdgeNGramTokenFilterV2", 
       "maxGram":15, 
       "side": "back" 
      } 
     ] 
} 

是否有結合兩者的選擇,而不讓他們忙亂起來的結果

回答

2

添加兩個字段到索引,用兩個不同的自定義分析:一個前綴,一個用於後綴,當查詢時,查詢兩個字段。

+0

它肯定會工作,但似乎有點像黑客,你不覺得嗎?它也迫使我使用一個字段映射函數。 –