我收集了200个文件,包含20个字段。有几个字段有" - "和"。"然后是一个唯一的文件名字段。
我转换了" - "到" _"而问题仍然存在。似乎"。"造成了大部分问题。我认为索引器在点上分裂,因此文件名被索引,扩展名被索引,但不是整个文件名+扩展名。
以下是我所拥有的文件样本。 (注意:如果您使用此示例进行测试,它将快速返回,但在200万个文档上结果速度会发生变化)
{
"FileName" : "NA2148-958-041114.PDF",
"Customer" : "customer-958"
},
{
"FileName" : "NA2149-958-041116.PDF",
"Customer" : "customer-958"
},
{
"FileName" : "NA2149-959-041118.PDF",
"Customer" : "customer-959"
}
我在集合上创建了以下全文搜索。
db.test.createIndex({" $ **":" text"})
如果我对完整文件名进行全面搜索,则返回单个文档最多需要65秒。
db.test.find({$ text:{$ search:" \" NA2148-958-041114.PDF \""}})
如果我做一个解释()
db.test.find({$ text:{$ search:&#34; \&#34; NA2148-958-041114.PDF \&#34;&#34;}})。explain()< / p>
"parsedTextQuery" : {
"terms" : [
"041114",
"958",
"na2148",
"pdf"
],
"negatedTerms" : [],
"phrases" : [
"NA2148-958-041114.PDF"
],
"negatedPhrases" : []
}
我期待解释中的术语与短语相同,并使用该值搜索索引。
如果我执行以下搜索,它将在大约15秒内返回文档。
db.test.find({$ text:{$ search:&#34; NA2148-958-041114.PDF&#34;}})。explain()***(没有&#34;)** )
{
"terms" : [
"041114",
"958",
"na2148",
"pdf"
],
"negatedTerms" : [],
"phrases" : [],
"negatedPhrases" : []
}
如果我执行以下搜索,则会在1秒内返回文档。
db.test.find({$ text:{$ search:&#34; 041114&#34;}})
{
"terms" : [
"041114"
],
"negatedTerms" : [],
"phrases" : [],
"negatedPhrases" : []
}
我怀疑索引步骤是将值拆分,因此整个文件名只有块没有索引。
有没有办法让搜索只使用短语而不是在被&#34;&#34;包围时进行搜索。或者让索引步骤不在#34; - &#34;上进行标记化。或&#34;。&#34;在文件名中?
注意:我已经读过使用$ default_language索引:&#34; none&#34;将使用简单的tokernizer,但这并没有改变结果。
关于这个主题的任何帮助或指示都会很棒。
添加&#34; \&#34;时的结果如下在&#34; - &#34;前面在explain()或速度方面没有什么不同。
db.text.find({$ text:{$ search:&#34; \&#34; NA2148 \ -958 \ -041114 \ .PDF \&#34;&#34;}})。解释()
{
"terms" : [
"041114",
"958",
"na2148",
"pdf"
],
"negatedTerms" : [],
"phrases" : [
"NA2148-958-041114.PDF"
],
"negatedPhrases" : []
}