More_like_this 带过滤器的查询
More_like_this query with a filter
我在弹性搜索中索引了 1702 个文档,其中类别作为字段之一,它还有一个名为 SequentialId 的字段。
我最初获取了类别为 1.1 的文档,它们介于文档 1 和文档 850 之间,如下所示。
**POST testucb/docs/_search
{
"size": 1702,
"query": {
"bool": {
"must": [
{"match": {
"Category": "1.1"
}}
],
"filter":[
{
"range":
{
"SequentialId":
{
"gte":1,
"lte":850
}
}
}
]
}
}
}**
上面的查询给了我 834 个与类别 1.1 匹配的文档。(我有二进制文件从结果 JSON 输出中解析出 834 个 _id。)
我现在的目标是将这 834 个 _id 提供到 more_like 这个查询中作为其余文档的训练集,这是我的测试集(从 sequentialid 851 到 1702 的文档是我的测试集)
我在下面使用过滤器尝试了这个 more_like_this 查询。
POST /testucb/docs/_search
{
"size": 1702,
"fields": [
"SequentialId",
"Category",
"PRIMARY_CONTENT_EN"
],
"query": {
"more_like_this":
{
"fields": [
"PRIMARY_CONTENT_EN"
],
"like":[
<-----------834 _ids goes here ---->
],
**"filter":[
{
"range":
{
"SequentialId":
{
"gte":851,
"lte":1702**
}
}
}
],
"min_term_freq": 1,
"min_doc_freq": 1,
"max_query_terms": 15,
"min_word_len": 3,
"stop_words": [
],
"boost": 2,
"include":false
}
}
}
我收到查询解析异常,提示 MLT 不支持过滤器。
我不确定如何提供 sequentialid 从 851 到 1702 的其余文档作为我的测试集。
我希望清楚我的期望 accomplish.Can 你们请帮助我如何完成我的任务?我是弹性搜索的新手。
如果你想预先做一个更像这个查询和过滤器,你应该使用 bool query with filter clause (Elasticsearchversion > 2.0)
POST /testucb/docs/_search
{
"size": 1702,
"fields": [
"SequentialId",
"Category",
"PRIMARY_CONTENT_EN"
],
"query": {
"bool": {
"must": [
{
"more_like_this": {
"fields": [
"PRIMARY_CONTENT_EN"
],
"like": [
<-----------834 _ids goes here ---->
],
"min_term_freq": 1,
"min_doc_freq": 1,
"max_query_terms": 15,
"min_word_len": 3,
"stop_words": [],
"boost": 2,
"include": false
}
}
],
"filter": {
"range": {
"SequentialId": {
"gte": 851,
"lte": 1702
}
}
}
}
}
}
如果您使用旧版本的 elasticsearch,您应该使用 filtered query 而不是
我在弹性搜索中索引了 1702 个文档,其中类别作为字段之一,它还有一个名为 SequentialId 的字段。
我最初获取了类别为 1.1 的文档,它们介于文档 1 和文档 850 之间,如下所示。
**POST testucb/docs/_search
{
"size": 1702,
"query": {
"bool": {
"must": [
{"match": {
"Category": "1.1"
}}
],
"filter":[
{
"range":
{
"SequentialId":
{
"gte":1,
"lte":850
}
}
}
]
}
}
}**
上面的查询给了我 834 个与类别 1.1 匹配的文档。(我有二进制文件从结果 JSON 输出中解析出 834 个 _id。) 我现在的目标是将这 834 个 _id 提供到 more_like 这个查询中作为其余文档的训练集,这是我的测试集(从 sequentialid 851 到 1702 的文档是我的测试集)
我在下面使用过滤器尝试了这个 more_like_this 查询。
POST /testucb/docs/_search
{
"size": 1702,
"fields": [
"SequentialId",
"Category",
"PRIMARY_CONTENT_EN"
],
"query": {
"more_like_this":
{
"fields": [
"PRIMARY_CONTENT_EN"
],
"like":[
<-----------834 _ids goes here ---->
],
**"filter":[
{
"range":
{
"SequentialId":
{
"gte":851,
"lte":1702**
}
}
}
],
"min_term_freq": 1,
"min_doc_freq": 1,
"max_query_terms": 15,
"min_word_len": 3,
"stop_words": [
],
"boost": 2,
"include":false
}
}
}
我收到查询解析异常,提示 MLT 不支持过滤器。 我不确定如何提供 sequentialid 从 851 到 1702 的其余文档作为我的测试集。
我希望清楚我的期望 accomplish.Can 你们请帮助我如何完成我的任务?我是弹性搜索的新手。
如果你想预先做一个更像这个查询和过滤器,你应该使用 bool query with filter clause (Elasticsearchversion > 2.0)
POST /testucb/docs/_search
{
"size": 1702,
"fields": [
"SequentialId",
"Category",
"PRIMARY_CONTENT_EN"
],
"query": {
"bool": {
"must": [
{
"more_like_this": {
"fields": [
"PRIMARY_CONTENT_EN"
],
"like": [
<-----------834 _ids goes here ---->
],
"min_term_freq": 1,
"min_doc_freq": 1,
"max_query_terms": 15,
"min_word_len": 3,
"stop_words": [],
"boost": 2,
"include": false
}
}
],
"filter": {
"range": {
"SequentialId": {
"gte": 851,
"lte": 1702
}
}
}
}
}
}
如果您使用旧版本的 elasticsearch,您应该使用 filtered query 而不是