弹性搜索中的映射

时间:2016-07-19 07:32:19

标签: elasticsearch

早上好,在我的代码中,我无法搜索包含单独单词的数据。如果我搜索一个单词都很好。我认为映射问题。我用邮递员。当我输入网址http://192.168.1.153:9200/sport_scouts/video/_mapping并使用方法GET时,我得到:

{
  "sport_scouts": {
    "mappings": {
      "video": {
        "properties": {
          "hashtag": {
            "type": "string"
          },
          "id": {
            "type": "long"
          },
          "sharing_link": {
            "type": "string"
          },
          "source": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "user_id": {
            "type": "long"
          },
          "video_preview": {
            "type": "string"
          }
        }
      }
    }
  }
}  

所有好的标题都有字符串,但是如果我搜索两个或更多的单词,我就会变得空洞。我在Trait中的代码:

public function search($data) {

        $this->client();

        $params['body']['query']['filtered']['filter']['or'][]['term']['title'] = $data;
        $search = $this->client->search($params)['hits']['hits'];
        dump($search);
    }  

然后我在控制器中调用它。你能帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

无法找到索引数据的原因是索引期间分析不匹配以及查询数据时使用严格的术语过滤器。

使用映射配置,您将使用默认分析(除了许多其他操作之外)进行标记化。因此,您插入的每个多字数据都会在标点符号或空格中分割。如果你插入例如“一些伟大的句子”,elasticsearch将以下术语映射到你的文档:“some”,“great”,“sentence”,但不是术语“伟大的句子”。因此,如果您对“精彩句子”或包含空格的原始值的任何其他部分进行术语过滤,则不会得到任何结果。

请参阅elasticsearch文档,了解如何配置映射以进行索引而不分析(https://www.elastic.co/guide/en/elasticsearch/guide/current/mapping-intro.html#_index_2)或考虑在现有映射上执行match query而不是term filter({{3 }})。

请注意,如果切换到not_analyzed,您将禁用许多模糊的全文查询功能。当然,您可以设置一个映射,在不同的字段中进行分析和非分析。然后由您决定要查询的字段。