1

「||」で区切られたキーと値のペアを格納するために使用する EDM.string フィールドがあります。とコンマ。例えば:

{
    "CustomField": "1234|||student, 5678||blue, 999||metallica, etc..."
}

キーと値の組み合わせを抽出するクエリを実行する必要があります。例えば:

search=5678 blue&searchFields=CustomField&searchMode=all&queryType=full

正規表現を使用して、次のように動作することを期待していました。

search=/5678.*blue/&queryType=full&searchMode=all

デフォルトのアナライザーを使用しているため、「||」を無視しているようです。正規表現を使用してみましたが、成功しませんでした。EDM.Collection(string) に格納せずに、キーと値のペアでクエリを実行できますか? 新しい再インデックス プロセスは避けたいと思います。前もって感謝します。

アップデート

コレクションと新しいデータセットの使用:

{
    "@odata.context": "https://[service].search.windows.net/indexes('[index]')/$metadata#docs",
    "@odata.count": 3,
    "value": [
        {
            "@search.score": 0.45867884,
            "uniqueid": "5",
            "Name": null,
            "Kvp": [
                "1234||sepultura",
                "999||programmer",
                "876||no education"
            ],
            "Kvp2": "1234||sepultura, 999 programmer, 876||no education"
        },
        {
            "@search.score": 0.38223237,
            "uniqueid": "1",
            "Name": null,
            "Kvp": [
                "1234||metallica",
                "999||horse education",
                "876||high school"
            ],
            "Kvp2": "1234||metallica, 999 horse education, 876||high school"
        },
        {
            "@search.score": 0.38223237,
            "uniqueid": "3",
            "Name": null,
            "Kvp": [
                "1234||john mayer",
                "999||kid education",
                "876||university"
            ],
            "Kvp2": "1234||john mayer, 999 kid education, 876||university"
        }
    ]
}

私の検索クエリは次のようになります。

Kvp: education&$count=true&queryType=full&searchMode=all

問題は、uniqueid 5 が取得されないようにしたいということです。タグの 1 つの値として「教育」がありますが、999 キーではありません。

また試しました:

Kvp: 999||education&$count=true&queryType=full&searchMode=all

Kvp: /.*999.*/ AND /.*education.*/&$count=true&queryType=full&searchMode=all

Kvp: /999.*education/&$count=true&queryType=full&searchMode=all
4

2 に答える 2

1

クエリを引用符で囲んで、フレーズ検索を使用します。Kvp:"999||education"

アナライザーは | を削除します。文字なので、これは事実上 と同等Kvp:"999 education"です。理解しておくべきことは、分析がどのように機能するかです。「1234|||student, 5678||blue, 999||metallica」を索引付けする場合、ここで索引付けするのは次の 6 つの用語です。

  • 1234
  • 学生
  • 5678
  • 青い
  • 999
  • メタリカ

and クエリは機能しません。これは、フィールド内のリスト内のどこかで一致を探すため、id 5 に一致します。フレーズ クエリの場合とは異なり、順序または隣接関係は考慮されません。

単一の用語内のすべてに一致する必要があるため、正規表現クエリは機能しません。Kvp:999.*education「999」と「教育」は別々の用語に分析されるため、機能しません。そのため、その正規表現に一致する単一の用語はありません。


ちなみに、別のオプションは、アナライザーを変更することです。たとえば、空白アナライザーを使用した場合、インデックス付きの用語は次のように変更されます。

  • 1234||学生、
  • 5678||青、
  • 999||メタリカ、

これは解決策になる可能性がありますが、「メタリカ」だけを効率的に検索することは不可能です.

于 2018-06-13T15:25:10.367 に答える