2015-04-02 62 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