js_需求

作者: 唯此 | 来源:发表于2018-08-13 09:51 被阅读0次

整体数据流转:

用户输入 (input_content)-> 请求(search_request) -> 向ES发送请求(es_query) -> 获取ES的返回结果(es_result) -> 展示结果

input_content

  • 如何解析inputConnent?

设输入的内容为inputContent, inputContent按照如下格式做解析:“字段1:具体值 字段2:具体值”.解析示例:“ 日期:20150201~20160101 公司:深高速 公告来源:上交所 排序:日期”需要解析为如下形式
localhost:3000//s?annouceDate=20150201~20160101&announceCompany=深高速&fileSrc=上交所&sortBy=annouceDate

  • 如何判定inputContent的合法性?
  1. 单个字段的合法性检查见下表


    image.png
  2. 搜索条件至少有一个。

  3. 对于不合法的字段需要提示字段不合法。例如“日期:20150201~201601“会被提示”日期字段不合法“。

search_request

  • 如何从input_content中解析出search_request?
    根据下表中的对应关系来解析为响应的json


    image.png

search_request的示例如下:

para: {annouceDate: 20150201~20160101,
announceCompany: '深高速',
fileSrc: '上交所',
sortBy: annouceDate}
}

参考的解析代码(JS):

function parseSearchInput(sample_str) {
    // 1.把所有的中文的冒号转换为英文的冒号
    // 2.根据英文冒号来做切断,获取每个断点的坐标,保存在indexArr里。
    // 3.根据indexArr把原先的字符串解析成object, 其中把空格分开的
    let new_str = sample_str.replace(/:/g,':')
    let headPattern = /[\d\w\u4e00-\u9fa5]+:/g
    let indexArr = []
    let aObj = {}
    let theRes
    while (true){
        theRes = headPattern.exec(new_str)
        if(theRes === null){
            indexArr.push(new_str.length)
            break
        }
        indexArr.push(theRes.index)
        indexArr.push(theRes.index+theRes[0].length)
    }
    let theValueArr
    for(i=0; i<indexArr.length/2 -1;i++){
        theValueArr = sample_str.slice(indexArr[2*i+1],indexArr[2*i+2]).split(' ')
        theValueArr = theValueArr.filter((value) => (value.length > 0))
        aObj[sample_str.slice(indexArr[2*i],indexArr[2*i+1]-1)] = theValueArr
    }
    return aObj
}
let sample_str = '字段1:adfjlk 字段2:萨芬'
console.log(JSON.stringify(parseSearchInput(sample_str)))
​
let sample_str2 = '字段1:深圳 高速 字段2:萨芬'
console.log(JSON.stringify(parseSearchInput(sample_str2)))

es_query

  • 如何将search_request解析为es_query?
    每个字段的处理逻辑见下表:
    image.png
    传递给es的json形式需要使用"DSL"语法.参见下面的参考链接:
    http://cwiki.apachecn.org/pages/viewpage.action?pageId=4260558
  • Elastic Search的hosts与目标index是什么?
hosts='192.168.1.6'
index = 'index_info'

es_result

返回结果的json样式如下:

{
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 2176,
    "max_score": 1.0,
    "hits": [
      {
        "_index": "index_info",
        "_type": "json",
        "_id": "302",
        "_score": 1.0,
        "_source": {
          "title": "公开发行可转换公司债券发行公告",
          "pdf_id": "20180718302"
        }
      },
      {
        "_index": "index_info",
        "_type": "json",
        "_id": "313",
        "_score": 1.0,
        "_source": {
          "title": "第五届董事会2018年度第五次临时会议决议公告",
          "pdf_id": "20180718313"
        }
      },
      {
        "_index": "index_info",
        "_type": "json",
        "_id": "314",
        "_score": 1.0,
        "_source": {
          "title": "长沙中联重科环境产业有限公司审计报告",
          "pdf_id": "20180718314"
        }
      },
      {
        "_index": "index_info",
        "_type": "json",
        "_id": "322",
        "_score": 1.0,
        "_source": {
          "title": "简式权益变动报告书(二)",
          "pdf_id": "20180718322"
        }
      },
      {
        "_index": "index_info",
        "_type": "json",
        "_id": "332",
        "_score": 1.0,
        "_source": {
          "title": "发行股份购买资产暨关联交易报告书(草案)摘要",
          "pdf_id": "20180718332"
        }
      },
      {
        "_index": "index_info",
        "_type": "json",
        "_id": "335",
        "_score": 1.0,
        "_source": {
          "title": "关于本次重大资产重组相关主体不存在依据《关于加强与上市公司重大资产重组相关股票异常交易监管的暂行规定》第十三条不得参与任何上市公司重大资产重组情形的说明",
          "pdf_id": "20180718335"
        }
      },
      {
        "_index": "index_info",
        "_type": "json",
        "_id": "338",
        "_score": 1.0,
        "_source": {
          "title": "关于公司股票暂不复牌的提示性公告",
          "pdf_id": "20180718338"
        }
      },
      {
        "_index": "index_info",
        "_type": "json",
        "_id": "340",
        "_score": 1.0,
        "_source": {
          "title": "关于本次资产重组前12个月内购买、出售资产情况的说明",
          "pdf_id": "20180718340"
        }
      },
      {
        "_index": "index_info",
        "_type": "json",
        "_id": "343",
        "_score": 1.0,
        "_source": {
          "title": "董事会关于评估机构的独立性、评估假设前提的合理性、评估方法与评估目的的相关性以及评估定价的公允性的说明",
          "pdf_id": "20180718343"
        }
      },
      {
        "_index": "index_info",
        "_type": "json",
        "_id": "349",
        "_score": 1.0,
        "_source": {
          "title": "独立董事关于发行股份购买资产暨关联交易的独立意见",
          "pdf_id": "20180718349"
        }
      }
    ]
  }
}

调整

1.logo与网站名字替换.
2.搜索结果,全都采用了分词匹配的模式.需求是要求关键词要精确匹配. 应该要改一下发给ES的请求样式.


image.png
  1. 筛选放在一个按钮上,是有颜色的.重置放在另一个按钮上,是浅色的.(理由:预期用户80%的概率是点击筛选,只有20%的概率是点击重置). 这个控件最好封装为一个我们自己的组件.


    image.png

    4.输入框放大(现在太窄了)


    image.png

相关文章

  • js_需求

    整体数据流转: 用户输入 (input_content)-> 请求(search_request) -> 向ES发...

  • js_速查

    form-ajax速查

  • js_基本入门(一)

    js_(一) 1 输出信息的几种方式 Alert() 在页面弹出一个对话框,早期JS调试使用。 Confirm()...

  • JS_旋转木马

    核心代码: 源码:吻我

  • JS_继承进阶

    day19_JS_继承进阶 1.JS中的继承 继承是面向对象中一个比较核心的概念。其他正统面向对象语言都会有两种方...

  • JS_尾递归

    函数调用自身,称为递归。当递归调用是整个函数体中最后执行的语句且它的返回值不属于表达式的一部分时,这个递归调用就是...

  • JS_函数柯里化

    JS_函数柯里化 与函数绑定密切相关的主体是函数柯里化(function currying),它用于创建已经设置好...

  • JS_面向对象_01

    开篇 由来 面向对象是计算机语言的一种标志,他们有类的概念,而通过类,我们可以创建无数个对象去使用该类的方法和属性...

  • JS_简易轮播图

    核心代码:

  • JS_单例模式

    JS_单例模式 什么是单例模式? 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 单例模式的优点 可以用来...

网友评论

      本文标题:js_需求

      本文链接:https://www.haomeiwen.com/subject/enrybftx.html