Elasticsearch:映射文本字段以进行搜索优化

时间:2014-03-24 10:38:01

标签: search elasticsearch full-text-search

我必须实现一个文本搜索应用程序来索引新闻文章,然后允许用户在这些文本中搜索关键词,短语或日期。

在对我的选项(主要是SOLR与弹性搜索)进行一些考虑之后,我最终使用elasticsearch进行了一些测试。

现在我被困在关于映射和搜索查询构造选项的部分最适合我遇到的一些特殊情况。我当前的映射只有一个字段,其中包含所有文本,需要进行分析才能进行搜索。

与字段映射的具体部分:

"txt": {
         "type" : "string",
         "term_vector" : "with_positions_offsets",
         "analyzer" : "shingle_analyzer"
       }

其中shingle_analyzer是:

"analysis" : {
           "filter" : {
              "filter_snow": {
                  "type":"snowball",
                  "language":"romanian"
              },
              "shingle":{
                  "type":"shingle",
                  "max_shingle_size":4,
                  "min_shingle_size":2,
                  "output_unigrams":"true",
                  "filler_token":""
               },
               "filter_stop":{
                  "type":"stop",
                  "stopwords":["_romanian_"]
               }
           },
           "analyzer" : {
               "shingle_analyzer" : {
                   "type" : "custom",
                   "tokenizer" : "standard",
                   "filter" : ["lowercase","asciifolding", "filter_stop","filter_snow","shingle"]
                                    }
            }}

我的问题涉及以下情况:

  1. 我必须搜索“ING”并且有几个“ing”。返回。
  2. 我必须搜索“E!”并且分析仪杀死了 标点符号,因此没有结果。
  3. 我必须搜索某些用作公司名称的大写常用术语(如“Apple”但有多个单词),而小写过滤器会产生无用的结果。
  4. 我的想法是使用不同的过滤器构建不同的字段,以涵盖所有这些可能的问题。

    三个问题:

    1. 用不同的分析仪正确分割三个字段中的字段吗?
    2. 搜索时如何使用不同的字段?
    3. 有人可以解释得分如何包含所有这些字段吗?

0 个答案:

没有答案