0

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

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

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

4

1 回答 1

1

对于可搜索字段,Azure 搜索支持精确匹配和前缀匹配(请在此处阅读后缀运算符“*”:简单查询语法。对于可过滤字段,我们仅支持精确匹配。

在索引时,文档中的文本被分解为术语。例如,如果您使用标准(默认)、非特定语言分析器,这将是为您的问题中的第二句生成的术语列表:

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 文本分割算法将句子分解为术语。在这种情况下,它在每个空格、逗号和“=”符号上都被破坏了。

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

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

于 2015-04-02T17:59:03.543 回答