0

フィールド インデックスでテキストの一部を検索するにはどうすればよいでしょうか。例: Invoicenumber が Index に登録されている場合、InvoiceNumber ='INV04552' とします。

search ='45' および searchFileds=InvoiceNumber と入力すると結果は得られませんが、search='INV04552' の場合は結果が得られます。

search ='45' の場合に結果が必要です。これを修正するにはどうすればよいですか?

4

1 に答える 1

1

検索可能なフィールドについては、Azure Search は完全一致とプレフィックス マッチングをサポートしています (接尾辞演算子 '*' については、こちらの単純なクエリ構文を参照してください。フィルター可能なフィールドについては、完全一致のみがサポートされています。

インデックス作成時に、ドキュメント内のテキストは用語に分割されます。たとえば、標準 (デフォルト) の非言語固有のアナライザーを使用する場合、これは質問の 2 番目の文に対して生成される用語のリストになります。

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 を 2 つの用語に分割するようにアナライザーに指示するものです。その結果、それぞれが検索可能になります。または、請求書番号の最初の 3 ~ 4 文字を切り取り、プレフィックス クエリを使用して「4552」の「45」を検索することもできます。これは、最初の 4 文字が意味をなさない場合にのみ有効なソリューションです。

これがあなたの質問に答えているかどうか教えてください。興味があれば、詳細を提供できます。

于 2015-04-02T17:59:03.543 に答える