【问题标题】:Elasticsearch NEST - Phrase searchElasticsearch NEST - 短语搜索
【发布时间】:2016-03-31 08:14:05
【问题描述】:

我应该使用什么方法来让我的查询从输入短语的文本中返回至少包含 2 个关键字的命中。

例如,如果输入“hellofriend”,我希望返回结果包含“hello”和“friend”的文档文中某处。如果输入“hello good friend”,我想要文本中 3 个关键字中的 2 个的结果。或者至少具有最佳组合的结果排在首位。 如果我使用下面这样的代码,我会得到“你好”或“朋友”但不是两者都有的结果。

        var searchResults = client.Search<Thread>(s => s
        .Type("threads")
        .From(0)
        .Size(100)
        .Query(q => q
            .Match(qs => qs
                .OnField(p => p.Posttext)
                .Query("hello friend")
                )
            )
            .Highlight(h => h
            .OnFields(
                f => f.OnField("posttext").PreTags("<b>").PostTags("</b>").FragmentSize(150)
                )
            )
        );

我可以通过这样的代码获得我想要的结果,但它不灵活,因为短语可以包含任意数量的单词。

        var searchResults = client.Search<Thread>(s => s
        .Type("threads")
        .From(0)
        .Size(100)
        .Query(q => q
            .Match(qs => qs
                .OnField(p => p.Posttext)
                .Query("hello")
                )
                &&
                q.Match(qs => qs
                .OnField(p => p.Posttext)
                .Query("friend")
                )
            )
            .Highlight(h => h
            .OnFields(
                f => f.OnField("posttext").PreTags("<b>").PostTags("</b>").FragmentSize(150)
                )
            )
        );

我想我错过了什么。请帮忙。

提前致谢。

【问题讨论】:

    标签: elasticsearch nest elasticsearch-net


    【解决方案1】:

    你需要使用词组查询..

    在匹配中,您需要将类型指定为短语 ..

    https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html#query-dsl-match-query-phrase

    如果您阅读上面的文章,我想您可以找到问题的方向..

    PS:我知道用于 javascript 的 elasticsearch...

    【讨论】:

      【解决方案2】:

      我发现添加 .Operator(Operator.And) 到 Match 查询在我的情况下有效。但我需要对短语搜索进行更多调查。

      【讨论】:

      • 好的..and 运算符在某种程度上像短语一样工作,但它们意味着 thr 文档必须同时具有这两个术语..但是,如果使用 or 运算符..它适用于任何术语..跨度>
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多