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"}
}
]
}
wildcard
、matching
、などのさまざまな組み合わせを試した後query_string
、結果が得られず、次の問題が残っています。
- SQL を使用した場合と同様の方法で数値フィールドを照会することはできません。たとえば、
select * from subject where curr_duns_number like '%123%';
- Elasticsearch が考慮している並べ替えのトークンは通常、会社名の単語であるため、並べ替え順序が適切に適用されません。