【问题标题】:Indexing documents only with numeric fields in elasticsearch在弹性搜索中仅使用数字字段索引文档
【发布时间】:2017-09-01 19:16:31
【问题描述】:

我正在尝试在 elasticsearch 中存储仅由数字字段表示的对象。在我的例子中,每个对象都有 300 个浮点字段和 1 个 id 字段。我已将 id 字段设置为 not_analyzed。我可以将文档存储在 ES 中。

 "_index": "smart_content5",
    "_type": "doc2vec",
    "_id": "AVtAGeaZjLL5cvd8z9y7",
    "_score": 1,
    "_source": {
      "feature_227": 0.0856793,
      "feature_5": -0.115823,
      "feature_119": -0.0379987,
      "feature_145": 0.17952,
      "feature_29": 0.0444945,

但现在我想运行一个用相同的 300 个字段表示但数值不同的查询(当然)。现在我想找到其 300 个字段与此查询字段“最相似”的文档。 所以这有点像做余弦相似度,但我正在尝试使用 ES 来做这件事,以便它很快。

(1)首先,有没有可能做我正在做的事情??

(2) 其次,我探索了 ES 的 function_score 功能并尝试使用它,但它返回最大匹配分数为 0.0!!

关于我应该使用什么以及我在 [2] 中可能做错什么的任何 cmets。

【问题讨论】:

    标签: python elasticsearch similarity vector-space


    【解决方案1】:

    我认为你仍然需要function_score,但就像这样(它对我有用):

    {
      "query": {
        "function_score": {
          "query": {},
          "functions": [
            {
              "gauss": {
                "feature_227": {
                  "origin": "0",
                  "scale": "0.5"
                }
              }
            },
            {
              "gauss": {
                "feature_5": {
                  "origin": "0",
                  "scale": "0.5"
                }
              }
            },
            {
              "gauss": {
                "feature_119": {
                  "origin": "0",
                  "scale": "0.5"
                }
              }
            },
            {
              "gauss": {
                "feature_145": {
                  "origin": "0",
                  "scale": "0.5"
                }
              }
            },
            {
              "gauss": {
                "feature_29": {
                  "origin": "0",
                  "scale": "0.5"
                }
              }
            }
          ],
          "score_mode": "sum"
        }
      }
    }
    

    【讨论】:

    • 当我尝试这样做时,出现以下错误:cause = ', %r' % self.info['error']['root_cause'][0]['reason' ] TypeError: 字符串索引必须是整数
    • 当我从“origin”和“scale”的值中删除双引号时,我没有收到此错误
    • 有趣。我使用 5.3 对此进行了测试,并从 Kibana 开发工具发送查询。
    • 我用的是1.7,大概就是这个原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-17
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-11
    相关资源
    最近更新 更多