0

我使用 Oracle river-jdbc 创建的 Elasticsearch 缓存中有 2 个字段。
第一列为数字,第二列为字符串name

我想在使用 jQuery 的自动完成文本框中使用这个索引。

所有实施都是针对该name领域完成的。
用户可以提供任何字符串(至少 3 个字符),然后使用给定的字符串进入 Elasticsearch 并搜索数据,因为它是name字段的“In-String”部分并返回结果。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, matchingquery_string它并没有给我结果,我留下了以下问题:

  1. 我无法以与使用 SQL 类似的方式查询数字字段,例如select * from subject where curr_duns_number like '%123%';
  2. 排序顺序没有正确应用,因为 Elasticsearch 考虑的排序标记通常是公司名称中的一个词。
4

1 回答 1

1

好吧,经过太多研究,我找不到任何答案。作为一种解决方案,我通过向其附加一个字符串来将数字字段的类型更改为字符串并实现该项目的自动完成。

为了结束这个问题,我接受了这个答案,但是如果将来有任何解决方案,我会添加或任何人都可以添加他的评论。

谢谢

于 2013-07-23T07:57:16.450 回答