【问题标题】:ElasticSearch: Query number field to use like clause as we do for string fieldElasticSearch:查询数字字段以使用 like 子句,就像我们对字符串字段所做的那样
【发布时间】:2013-07-19 13:59:38
【问题描述】:

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

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

所有实现都针对name 字段完成。
用户可以提供任何字符串(至少 3 个字符),然后使用给定的字符串进入 Elasticsearch 并搜索数据,因为它是 name 字段的“In-String”部分并返回结果。与使用name 字段的LIKE 运算符在SQL 中查询类似,它正在工作并且数据已加载到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"}
        }
    ]
}

在尝试了wildcardmatchingquery_string 等各种组合后,它并没有给我结果,我遇到了以下问题:

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

【问题讨论】:

标签: elasticsearch search numbers field sql-like


【解决方案1】:

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

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

谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    • 2019-02-25
    • 2015-12-24
    相关资源
    最近更新 更多