Elasticsearch validate API explain query terms from more like this against single field getting highlighted terms

Elasticsearch validate API explain query terms from more like this against single field getting highlighted terms

我有一个索引,有效地转换了 word 或 pdf 文档纯文本 "document_texts",建立在 Rails 堆栈上 ActiveModel 是使用 elasticsearch rails gems,对于模型,和 API。我希望能够根据文档文本匹配相似的word文档或pdf

我已经能够使用

将文档相互匹配
response = DocumentText.search \
  query: {
      filtered: {
          query: {
              more_like_this: {
                  ids: ["12345"]
              }
          }
      }
  }

但我想看看结果集是如何查询的,用于匹配文档的查询词是什么

使用 elasticsearch API gem 我可以做以下事情

 client=Elasticsearch::Client.new log:true

 client.indices.validate_query index: 'document_texts',
    explain: true,
    body: {
      query: {
          filtered: {
              query: {
                  more_like_this: {
                      ids: ['12345']
                  }
              }
          }
      }
   }

但我得到了这个回应

{"valid":true,"_shards":{"total":1,"successful":1,"failed":0},"explanations":[{"index":"document_texts","valid":true,"explanation":"+(like:null -_uid:document_text#12345)"}]}

我想了解查询是如何构建的,它最多使用 25 个术语进行匹配,这 25 个术语是什么,我如何从查询中获取它们?

我不确定它是否可能,但我想看看我是否可以获得 elasticsearches 分析器使用的 25 个术语,然后根据我的选择重新应用带有提升值的查询。

我也想在文档文本中突出显示这一点,但试过了

response = DocumentText.search \
  from: 0, size: 25,
  query: {
      filtered: {
          query: {
              more_like_this: {
                  ids: ["12345"]
              }
          },
          filter: {
              bool: {
                  must: [                            
                      {match: { documentable_type: model}}
                 ]
              }
          }

      }
  },
  highlight: {
    pre_tags: ["<tag1>"],
    post_tags: ["</tag1>"],
    fields: {
        doc_text: {
                type_name: {
                content: {term_vector: "with_positions_offsets"}
            }
        }
    }
  }

但这并没有产生任何结果,我想我是相当有希望的。我知道这应该是可能的,但很想知道是否有人做过这个或最好的方法。有什么想法吗?

包括一些仅供其他人使用的停用词,这将提供一种简单的方法来显示用于查询的术语。它不解决高亮问题,但可以给出用于 mlt 匹配过程的术语。其他一些设置仅用于显示

  curl -XGET 'http://localhost:9200/document_texts/document_text/_validate/query?rewrite=true' -d '
  {
      "query": {
            "filtered": {
                "query": {
                    "more_like_this": {
                        "ids": ["12345"],
                        "min_term_freq": 1,
                        "max_query_terms": 50,
                        "stop_words": ["this","of"]
                    }
                }
            }
        }
    }'

https://github.com/elastic/elasticsearch-ruby/pull/359

合并后应该更容易

client.indices.validate_query index: 'document_texts',
  rewrite: true,
  explain: true,
  body: {
    query: {
        filtered: {
            query: {
                more_like_this: {
                    ids: ['10538']
                }
            }
        }
    }
 }