【问题标题】:Elastic Search: boost "nicer" terms弹性搜索:提升“更好”的术语
【发布时间】:2016-01-24 23:19:17
【问题描述】:

成像以下,搜索词“棕狐”。

所有文档都有另一个字段,称为备用名称。

此字段有时包含诸如“动物”或“狐狸”之类的好词。有时它包含“不好”(或人类可读的)术语,如 ED2314 或 1231-234-D。

“不好”的东西有什么共同点,它们有“高”数量的数字,或者它们真的不是人类语言 WIPSDIFOW。

关于“提升”或将更好的术语排序到顶部的任何想法?

2016 年 1 月 24 日更新 感谢你的提问。

例如,搜索将在“名称”字段上完成。用户输入不会查询“备用名称”字段。它只是一个与排序相关的字段。用户喜欢在结果列表中看到它,但带有解释的排序/提升。 谢谢

【问题讨论】:

  • 我不清楚这个问题。如果搜索者正在搜索“brown fox”,他们将匹配任何具有“brown”或“fox”的alternate_name(在正常情况下),这两个词的匹配得分较高。 (如果他们专门搜索“不合适的术语”(如零件号),他们应该匹配该特定术语。)我假设您看到“看似无关”的匹配......它们是否来自“不合适” ' 在alternate_name 中的术语?能举个例子吗?
  • 感谢您的提问。我在问题中添加了更多信息。 “替代名称”字段与排序/提升相关。不是为了自己的查询。

标签: elasticsearch


【解决方案1】:

您可以执行一些有限的基于脚本的scoringsorting(会降低性能)。

但是,如果这是(可能)许多基于非结构化数据“调整评分”的请求中的第一个,那么最好为您的数据添加注释(预索引),以便在索引中更清楚地编写评分逻辑。


即添加alternate_name.dictionary_wordsalternate_name.non_dictionary_words(可能还有alternate_name.dictionary_word_composition_percent)之类的字段,并在加载数据集之前使用字典来丰富数据集。

这里的好处是评分策略出现在数据中,查询性能(包括评分或排序标准中的“百分比”字段)更好,并且您可以使用人类可读的术语未来功能的隔离(构面/自动完成/拼写检查)。此外,非人类可读的术语将更易于将来分析(例如,当您有足够的信息来注释/分离出“part_numbers”时)

【讨论】:

    【解决方案2】:

    使用 bool 查询,您可以提升漂亮的术语(查询子句),将它们封装到 should 键中:

    {
        "query": {
            "bool": {
                "must": {
                    "match": {  
                        "field": {
                            "query": "User input"
                        }
                    }
                },
                "should": [
                    { "match": {
                        "field": {
                            "query": "Animal"
                        }
                    }},
                    { "match": {
                        "field": {
                            "query": "Fox"
                        }
                    }}
                ]
            }
        }
    }
    

    要控制好词的相关性,您也可以使用boost 选项:

    ...
    {
      "match": {
        "field": {
          "query": "Fox",
          "boost": 3
        }
      }
    }
    ...
    

    Reference

    【讨论】:

    • 嗨,谢谢,我更新了我的问题。这可能具有误导性,我正在寻找对结果进行排序/提升的方法。不是查询的字段本身。
    • 考虑在should 选项中保留“alternate field”,在must 选项中保留“name”字段,这样只会检索匹配“name”字段的文档和包含“nice”的文档“替代字段”中的术语”获得更高的分数。
    猜你喜欢
    • 1970-01-01
    • 2014-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    • 2015-08-15
    • 2014-06-02
    相关资源
    最近更新 更多