我们如何搜索字段索引中的部分文本? 例如: 如果我在索引中有一个Invoicenumber,Say InvoiceNumber =' INV04552'
如果我输入搜索=' 45'和searchFileds = InvoiceNumber它不会给出任何结果,但它会在搜索时给出结果=' INV04552'。
我需要在搜索时得到结果=' 45'我该如何解决这个问题?
答案 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个字符没有意义,这只是一个有效的解决方案。
如果这回答了你的问题,请告诉我。如果您有兴趣,我可以提供更多详细信息。