我有一个字段,它被标记化并具有多个值的多值。我想将这些术语用作方面。当我尝试按照术语搜索时,我会收到一个问题,即搜索术语"不一定" (我们看到有一个空间),我得到的结果是"不是"。这让我相信我不能使用标记化字段作为构面字段。我尝试使用keywordtokenizer将字段的值复制到文本字段。在检查架构浏览器时我被告知:"抱歉,没有可用的术语信息:("这是在我删除旧索引并再次上传文档之后。我在这里做错了什么?
<copyField source="ColonCancerField" dest="cytokineField"/>
<field name="cytokineField" indexed="true" stored="true" multiValued="true" type="Cytokine_Pass"/>
<fieldType name="Cytokine_Pass" class="solr.TextField">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory" />
</analyzer>
</fieldType>
<field name="ColonCancerField" type="ColonCancer" indexed="true" stored="true" multiValued="true"
termPositions="true"
termVectors="true"
termOffsets="true"/>
<fieldType name="ColonCancer" class="solr.TextField" sortMissingLast="true" omitNorms="true">
<analyzer>
<filter class="solr.ShingleFilterFactory"
minShingleSize="2" maxShingleSize="5"
outputUnigramsIfNoShingles="true"
/>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms_ColonCancer.txt" ignoreCase="true" expand="true" tokenizerFactory="solr.KeywordTokenizerFactory"/>
<filter class="solr.KeepWordFilterFactory"
words="prefLabels_ColonCancer.txt" ignoreCase="true"/>
</analyzer>
</fieldType>
<copyField source="content" dest="ColonCancerField"/>
答案 0 :(得分:1)
最有可能的是,您的同义词和KeepWord列表之间出现了问题。在Admin UI中,有Analyze屏幕,您可以在其中放置原始文本和搜索字符串,并使用所选字段(ColonCancerField为您)查看两者。比赛将突出显示。
搜索的内容。对于facet,使用ColonCancerField应该对facet有效,无需任何搜索即可尝试(q = *:*)。
KeywordTokenizer根本不拆分文本,所以你应该将整个字段作为一个方面。
此外,copyText指令不会分层。因此,您无法将field1复制到field2,然后将field2复制到field3。您需要将field1复制到field2和field3。这可能是你问题的一部分。
答案 1 :(得分:0)
我决定添加一个字段(cancerTerms)并在那里添加术语。但我不是在索尔之外这样做的。我正在使用分析链并通过ScriptUpdateProcessor传递它。在这里,我可以获取分析链的结果 并将结果存储到文档中(与strField一样)。然后我在这个领域(cancerTerms)面对。这实际上给了我正确的结果,它没有给我带有问题,而不是必然或任何其他类似的问题。此外,我不存储分析链字段(我以前)。存储它是没有意义的,因为它是一个复制字段(显然复制字段只复制源文本然后将其传送到分析器,并且不能链接)。我只存储链的结果(这对于分面很有用)。
以下是我正在做的简化视图:
内容 [已复制到] - &gt; ColonCancerField (分析链[未存储, 并将生成标记化字符串]) - &gt; 传递给更新脚本</ em> (已处理 每个标记为字符串)[添加到] - &gt; CancerTerms (strField)
id: 2040ee23-c5dc-459c-969f-2ebf6c728184
标题:鼻息肉中伴随哮喘的血液和粘膜嗜酸性粒细胞的免疫调节。
内容背景:慢性鼻 - 鼻窦炎伴鼻息肉(CRSwNP)常与哮喘有关。粘膜嗜酸性粒细胞(EO) 已发现浸润与哮喘和疾病相关 严重程度,但不一定在每个患者。其他多因素 需要免疫过程来确定疾病的内型和 对治疗的反应。目的:评价EO的免疫调节作用 根据炎症蛋白迁移和存活 CRSwNP中的概况和哮喘状态。方法:93 包括CRSwNP的患者(47名哮喘患者)。每个病人都是 根据症状严重程度和息肉大小临床分期。鼻音 收集分泌物以建立细胞因子谱。驻外办事处 从血液样本和鼻息肉中纯化出来以描绘出来 通过流式细胞术确定特异性免疫表型并确定体外EO 与哮喘状态相关的生存。结果:CRSwNP in 哮喘患者的特征是嗜酸性粒细胞增多和高 鼻腔分泌物中白细胞介素(IL)-5的水平。虽然是EOs 在粘膜迁移后表现出活化谱,有 IL-5受体-β的相对下调表达(IL-5R?)对鼻腔内EOs的影响 哮喘患者。 IL-5和IL-9的EO培养显示出一种 通过IL-5R对哮喘患者的抗细胞凋亡作用? 调制。结论:粘膜嗜酸性粒细胞增多似乎是由EO诱导的 通过调节粘附受体进行鼻诱捕。在患者中 对于哮喘,抗细胞凋亡增强了EO的参与 T辅助细胞2型细胞因子对IL-5R的协同作用? 表达。该研究首次表明IL-9参与其中 在CRSwNP的EO稳态中可以解释其低效益 一些哮喘和鼻息肉患者的抗IL-5治疗。
细胞因子条件: t细胞替代事实类型ii interferonc7chemokineinterleukin 17前体白细胞 mediatorinterleukinst cell替换factort cell替换factoril9 蛋白质干扰素α-5细胞因子9蛋白
cancerTerms:但不一定非常
版本: 1522116540216901632
得分: 1.0
以下是一些代码(请原谅这些混乱。我已经包含了Solr ver.5的更改): 的 UpdateScript 强>
/***************************UpdateScript*********************************/
function getAnalyzerResult(analyzer, fieldName, fieldValue) {
var result = [];
var token_stream = analyzer.tokenStream(fieldName, new java.io.StringReader(fieldValue));//null value?
var term_att = token_stream.getAttribute(Packages.org.apache.lucene.analysis.tokenattributes.CharTermAttribute.class);
token_stream.reset();
while (token_stream.incrementToken()) {
result.push(term_att.toString());
}
token_stream.end();
token_stream.close();
return result;
}
function processAdd(cmd) {
doc = cmd.solrDoc; // org.apache.solr.common.SolrInputDocument
id = doc.getFieldValue("id");
logger.warn("update-script#processAdd: id=" + id);
var content = doc.getFieldValue("content"); // Comes from /update/extract
//facetList contains the actual facet terms
//facetAnalyzerName contains the Analyzer name for the term vector list names. (i.e the field type)
var facetList = ["cytokineTerms", "cancerTerms"];
var facetAnalyzerName = ["key_phrases", "ColonCancer"];
/*
Loop through all of the facets, and get the analyzer and the name for the field
Then add the terms to the document
*/
for(var i = 0; i < facetList.length; i++){
var analyzer = req.getCore().getLatestSchema().getFieldTypeByName(facetAnalyzerName[i]).getIndexAnalyzer();
var terms = getAnalyzerResult(analyzer, null, content);
for(var index = 0; index < terms.length; index++){
doc.addField(facetList[i], terms[index]);
}
}
}
// The functions below must be defined, but there's rarely a need to implement
// anything in these.
function processDelete(cmd) {
// no-op
}
function processMergeIndexes(cmd) {
// no-op
}
function processCommit(cmd) {
// no-op
}
function processRollback(cmd) {
// no-op
}
function finish() {
// no-op
}
/***************************UpdateScript*********************************/
<强> updateRequestProcessorChain 强>
/****************updateRequestProcessorChain ***********************/
<updateRequestProcessorChain name="script" default="true">
<processor class="solr.StatelessScriptUpdateProcessorFactory">
<str name="script">update-script.js</str>
<lst name="params">
<str name="config_param">example config parameter</str>
</lst>
</processor>
<processor class="solr.LogUpdateProcessorFactory"/>
<processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>
/****************updateRequestProcessorChain ***********************/
使用帖子上传
java -Durl=http://localhost:8983/solr/Cytokine/update -Dauto -Dparams=update.chain=script -jar bin/post.jar C:/Users/Kevin/Downloads/pubmed_result.json
来源: