Azure搜索查找匹配文本

时间:2015-04-02 13:04:52

标签: azure azure-search

我们如何搜索字段索引中的部分文本? 例如:  如果我在索引中有一个Invoicenumber,Say InvoiceNumber =' INV04552'

如果我输入搜索=' 45'和searchFileds = InvoiceNumber它不会给出任何结果,但它会在搜索时给出结果=' INV04552'。

我需要在搜索时得到结果=' 45'我该如何解决这个问题?

1 个答案:

答案 0 :(得分: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'在列表中,但'45'不在。标准分析器使用Unicode Text Segmentation算法将句子分解为术语。在这种情况下,它在每个空格,逗号和'='符号上都被打破。

要解决此问题,如果您的发票编号遵循明确定义的模式,则可以在编制索引之前对其进行预处理,方法是引入短划线“ - ”或空格,例如INV-04552。这将告诉分析仪将INV-04552分成两个术语。结果每个都是可搜索的。或者,您可以修剪发票编号的前3-4个字符,并使用前缀查询在'4552'中查找'45'。如果前4个字符没有意义,这只是一个有效的解决方案。

如果这回答了你的问题,请告诉我。如果您有兴趣,我可以提供更多详细信息。