0

Oracle river-jdbc を使用して作成した Elasticsearch キャッシュに 2 つのフィールドがあります。
最初の列は数値で、2 番目の列は文字列nameです。

jQuery を使用してオートコンプリート テキスト ボックスでこのインデックスを使用したいと考えています。

すべての実装はnameフィールドに対して行われます。
ユーザーは任意の文字列 (少なくとも 3 文字) を提供でき、ヒットは指定された文字列で Elasticsearch に移動し、nameフィールドの「文字列内」部分であるためデータを検索し、結果を返します。LIKEフィールドの演算子を使用してSQLでクエリを実行するのと同様にname、それは機能しており、データはUIにロードされます。

数値フィールドでも同じことをしたいのですが、数値フィールドの完全な値を指定しない限り、Elasticsearch はデータを返しません。そのため、オートコンプリートは数値フィールドでは機能しません。

以下はコードです:

河川フィールドの作成:

{
    "type": "jdbc",
    "jdbc": {
        "driver": "oracle.jdbc.driver.OracleDriver",
        "url": "jdbc:oracle:thin:@//<ip-addr>:1521/db",
        "user": "user",
        "password": "pwd",
        "sql": "select curr_duns_number as duns, TRIM(name) as company from subject where rownum < 10000"
    },
    "index": {
        "index": "subject",
        "type": "name"
    },
    "properties": {
        "duns": {"type": "string", "store": "yes"},
        "company": {"type": "string"}
    }
}

会社フィールドの取得:

POST http://<ip-addr>:9200/subject/name/_search
{
    "from": 0,
    "size": 10,
    "query": {
        "wildcard": {
            "COMPANY": "boo*"
        }
    },
    "sort": [
        {
            "COMPANY": {"order": "asc"}
        }
    ]
}

wildcardmatching、などのさまざまな組み合わせを試した後query_string、結果が得られず、次の問題が残っています。

  1. SQL を使用した場合と同様の方法で数値フィールドを照会することはできません。たとえば、select * from subject where curr_duns_number like '%123%';
  2. Elasticsearch が考慮している並べ替えのトークンは通常、会社名の単語であるため、並べ替え順序が適切に適用されません。
4

1 に答える 1

1

あまりにも多くの研究の後、私はこれに関する答えを見つけることができませんでした. 解決策として、文字列を追加して数値フィールドのタイプを文字列に変更し、このプロジェクトのオートコンプリートを実現しました。

質問を締めくくるために、私はこの回答を受け入れていますが、将来何らかの解決策が得られた場合は、追加するか、誰かがコメントを追加できます。

ありがとう

于 2013-07-23T07:57:16.450 に答える