有没有一种方法可以在Elasticsearch中编写具有不同条件的布尔查询?

时间:2019-01-21 20:36:32

标签: elasticsearch elasticsearch-query

我已经使用NodeJS Server设置了elasticsearch,并且需要一个有效的布尔查询来检查搜索中的不同条件。该怎么做?

我正在将Mongoosastic(查询DSL)与NodeJS和以下查询结合使用以获取结果

映射功能

shared

查询功能

async function mapMongoToElastic() {
return new Promise((resolve, reject) => {
console.log("---------Mapping gets created---------");
Product.createMapping(
  {
    mappings: {
      product: {
        properties: {
          ArtNumber: { type: "text" },
          Title: {
            type: "text",
            fields: {
              keyword: {
                type: "keyword"
              }
            }
          },
          DisplayPrice: { type: "double" },
          CF_Deliverytime: { type: "text" },
          Description_Short: { type: "text" },
          MainCat: {
            type: "text",
            fields: {
              keyword: {
                type: "keyword"
              }
            }
          },
          ItemCat: {
            type: "text",
            fields: {
              keyword: {
                type: "keyword"
              }
            }
          },
          Deeplink1: { type: "text" },
          Img_url: { type: "text" },
          CF_img_url2: { type: "text" },
          CF_img_url3: { type: "text" },
          CF_Availability: { type: "text" },
          CF_Productrating: {
            type: "text",
            fields: {
              keyword: {
                type: "keyword"
              }
            }
          },
          CF_Discount: {
            type: "text",
            fields: {
              keyword: {
                type: "keyword"
              }
            }
          },
          Shop: {
            type: "text",
            fields: {
              keyword: {
                type: "keyword"
              }
            }
          }
        }
      }
    }
  },
  function(err, mapping) {
    if (err) {
      console.log("error creating mapping (you can safely ignore this)");
      console.log(err);
      resolve(err);
    } else {
      console.log("X - ElasticSearch Mapping Created");
      resolve(mapping);
    }
   }
   );
  });
 }

预期结果: -查询“电视”

结果: 产品名称为“ TV” -如果“类别”也有“电视”,则将其排名更高。

问题: 如果搜索“电视”,也会列出Smart-TV-Controller,但是如果有人正在搜索“电视”,则不会列出Smart-TV-Controller

帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

似乎您正在尝试获得完全匹配。对于字段keywordTitle,您已经具有ItemCat类型的子字段。因此,请在匹配查询中使用关键字字段。

query: {
  multi_match: { 
    query: query.suche,
    fields: [ "Title.keyword^10", "ItemCat.keyword^5" ]
  }
}

如果您不希望在Title中查找完全匹配,则另一种方法是设置字段,如下所示:

fields: [ "Title^10", "ItemCat.keyword^5" ]