我一直在玩ElasticSearch以获得我的新项目.我已将默认分析器设置为使用ngram tokenfilter.这是我的elasticsearch.yml文件:
index:
analysis:
analyzer:
default_index:
tokenizer: standard
filter: [standard, stop, mynGram]
default_search:
tokenizer: standard
filter: [standard, stop]
filter:
mynGram:
type: nGram
min_gram: 1
max_gram: 10
Run Code Online (Sandbox Code Playgroud)
我创建了一个新索引并添加了以下文档:
$ curl -XPUT http://localhost:9200/test/newtype/3 -d '{"text": "one two three four five six"}'
{"ok":true,"_index":"test","_type":"newtype","_id":"3"}
Run Code Online (Sandbox Code Playgroud)
但是,当我使用查询text:hree
或text:ive
任何其他部分术语进行搜索时,ElasticSearch不会返回此文档.它仅在我搜索确切的术语(如text:two
)时返回文档.
我也尝试更改配置文件,以便default_search也使用ngram令牌过滤器,但结果是相同的.我在这里做错了什么,如何纠正?
在基于类的React组件中,我做这样的事情:
class SomeComponent extends React.Component{
onChange(ev){
this.setState({text: ev.currentValue.text});
}
transformText(){
return this.state.text.toUpperCase();
}
render(){
return (
<input type="text" onChange={this.onChange} value={this.transformText()} />
);
}
}
Run Code Online (Sandbox Code Playgroud)
为了简化我的观点,这是一个人为的示例。我本质上想要做的是保持对onChange函数的恒定引用。在上面的示例中,当React重新渲染我的组件时,如果输入值未更改,它将不会重新渲染输入。
这里要注意的重要事项:
现在,如果我要使用钩子重写此组件,请执行以下操作:
function onChange(setText, ev) {
setText(ev.currentValue.text);
};
function transformText(text) {
return text.toUpperCase();
};
function SomeComponent(props) {
const [text, setText] = useState('');
return (
<input type="text" onChange={onChange} value={transformText()} />
);
}
Run Code Online (Sandbox Code Playgroud)
现在的问题是,我需要传递text
到transformText
和setText
到onChange
分别的方法。我能想到的可能解决方案是:
进行上述任何一项操作都会更改对我需要维护的功能的常量引用,以便不input
重新渲染组件。我该如何使用挂钩?可能吗
请注意,这是一个非常简化的人为示例。我的实际用例非常复杂,我绝对不想不必要地重新渲染组件。
编辑:这不是React中useCallback做什么的重复项?因为我试图找出如何实现与类组件方式相似的效果,并且尽管useCallback
提供 …
我有一个 React 组件正在渲染div
. 不过,我希望div
将其渲染为最初一直滚动到底部。
我知道这可以通过使用 a 并在(或 in ) 中ref
设置属性来实现,但这会在最初渲染时导致闪烁。scrollTop
componentDidMount
useEffect
div
如果div
使用已在 DOM 元素上设置的属性进行渲染scrollTop
,则不会发生闪烁。
React 不scrollTop
支持div
. 那么有没有办法scrollTop
在组件挂载之前设置一个初始值呢?
我正在使用srcdoc属性将HTML内容加载到iframe中.iframe是一个没有权限的沙盒iframe,因此iframe中的所有Javascript都被阻止.但是,仍会在iframe内触发远程请求(例如CSS,图像等).
是否有任何可能的方法告诉iframe只加载我在srcdoc属性中提供的内容而不进行任何其他请求?
提前致谢