2015-04-02 82 views
0

我們如何搜索字段索引中的文本的一部分? 例如: 如果我有一個Invoicenumber提交的指數,說InvoiceNumber =「INV04552」Azure搜索找到匹配文本

如果我輸入搜索= '45' 和searchFileds = InvoiceNumber它不會給任何結果,但它給出結果時,搜索= 'INV04552'。

我需要結果時,搜索= '45'我該如何解決這個問題?

回答

1

對於搜索領域Azure的搜索支持精確匹配和前綴匹配(請閱讀有關後綴運算符「*」在這裏:Simple query syntax對於過濾領域,我們只支持精確匹配

在索引時間文本文檔是。 。分成方面。例如,如果使用標準(默認),非特定語言的分析,這將是你的問題,第二句產生的術語列表:

1: [for] 
2: [example] 
3: [if] 
4: [i] 
5: [have] 
6: [a] 
7: [invoicenumber] 
8: [filed] 
9: [in] 
10: [index] 
11: [say] 
12: [invoicenumber] 
13: [inv04552] 

如果查詢包含其中一個條款,該文件將被發現。正如你可以看到'INV04552'在lis上但'45'不是。標準分析器使用Unicode Text Segmentation算法將句子分解爲條目。在這種情況下,每個空格,逗號和'='符號都被打破。

要解決這個問題,如果您的發票號碼遵循明確定義的模式,則可以通過引入短劃線「 - 」或空格(例如INV-04552)對它們進行索引前的預處理。那會告訴分析儀將INV-04552分成兩個項。結果,每一個都是可搜索的。或者,您可以修整發票號碼的前3-4個字符,並使用前綴查詢在「4552」中查找「45」。如果前4個字符無意義,這只是一個有效的解決方案。

請讓我知道這是否回答你的問題。如果您有興趣,我可以提供更多詳情。

+0

是的,它是像45 *表達的作品,但我需要像\ * 45 \ *表達式,因爲前幾個字母不能修復,所以我不能拆分它,它應該搜索,但不止一個字段,例如發票數字和描述字段也是如此。我已經在SQL Server中使用LIKE語句實現了它。 – user2114049 2015-04-04 15:39:28