খালি ক্ষেত্রের জন্য কীভাবে এসএলআর জিজ্ঞাসা করবেন?


112

আমার একটি বড় সোলার সূচক রয়েছে এবং আমি লক্ষ্য করেছি যে কিছু ক্ষেত্রগুলি সঠিকভাবে আপডেট হয় না (সূচকটি গতিশীল)।

এর ফলে কিছু ক্ষেত্র খালি "আইডি" ফিল্ডে রয়েছে।

আমি এই প্রশ্নের চেষ্টা করেছি, কিন্তু তারা কার্যকর হয়নি:

 id:''
 id:NULL
 id:null
 id:""
 id:
 id:['' TO *]

খালি ক্ষেতগুলি জিজ্ঞাসা করার কোন উপায় আছে?

ধন্যবাদ

উত্তর:


144

এটা চেষ্টা কর:

?q=-id:["" TO *]

7
যদিও সোলারকিউরিসাইন্টাক্স পৃষ্ঠাটি "আইডি: [* টু *] বলেছে, কেবলমাত্র আইডি: [" "টু *] সলারের জন্য আমার পক্ষে কাজ করেছে 1.4।
জোনাথন ট্রান

1
@ ব্যবহারকারী2043553 না, আপনি ?q=-id:*যদি তা পানCannot parse '-q:*': '*' or '?' not allowed as first character in WildcardQuery
ইজমির রামিরেজ

1
@ ইজমিররামিরেজ আমি সোলার ৪.৪.১ এর উদাহরণ দিয়ে চেষ্টা করেছি এবং ?q=-id:*প্রত্যাশার মতো কাজ করেছি বলে মনে হচ্ছে। সম্ভবত পার্সিং ত্রুটিটি এই সমস্যার সাথে সম্পর্কিত ।
ব্যবহারকারী 2043553

দুঃখিত, সংস্করণটি ভুলে গেছি ... Lucene Specification Version: 3.2.0আমি ব্যবহার করছিলাম। তারা খুশী হয়ে সোলার ৪.৪.১ এ বাক্য গঠন যুক্ত করেছে।
ইজমির রামিরেজ

সাবধান
হোন

89

এক সাবধান! আপনি যদি এটি OR বা OR এর মাধ্যমে রচনা করতে চান তবে আপনি এই ফর্মটিতে এটি ব্যবহার করতে পারবেন না:

-myfield:*

তবে আপনার অবশ্যই ব্যবহার করা উচিত

(*:* NOT myfield:*)

এই ফর্মটি নিখুঁতভাবে কম্পোজেবল। স্পষ্টতই SOLR প্রথম ফর্মটি দ্বিতীয়টিতে প্রসারিত করবে তবে কেবল যখন এটি শীর্ষ নোড হবে। আশা করি এটি আপনার কিছুটা সময় বাঁচায়!


2
এই উত্তরটির তুলনায় এটি আরও বেশি পয়েন্টের দাবিদার। আপনি আমাদের অনেক সময় বাঁচিয়েছেন!
জ্যাক

এখানেও +1 করুন। আমি অন্যান্য বিকল্পগুলি বাস্তবায়ন করেছি তবে আমাকে এটিকে q = এর পরিবর্তে একটি fq = এ অন্তর্ভুক্ত করতে হয়েছিল এবং ক্ষেত্রটি খালি রয়েছে কিনা তা পরীক্ষা করার জন্য একটি OR প্রয়োগ করতে হয়েছিল বা একটি নির্দিষ্ট মান ছিল। এই ব্যবহারের ক্ষেত্রে এটিই একমাত্র বিকল্প।
পিক্সেলমিক্সার

আমি সম্মত হই যে এই প্রশ্নের গ্রহণযোগ্য উত্তর হওয়া উচিত
টিঙ্কার

তুমি আমাকে এত মাথা ব্যাথা থেকে বাঁচিয়েছ। আমি নিশ্চিত না যে আপনাকে যথেষ্ট যথেষ্ট ধন্যবাদ।
ক্যামওয়ে


11

আপনার যদি একটি বৃহত সূচক থাকে তবে আপনার একটি ডিফল্ট মান ব্যবহার করা উচিত

   <field ... default="EMPTY" />

এবং তারপরে এই ডিফল্ট মানটির জন্য জিজ্ঞাসা করুন। এটি Q = -id এর চেয়ে অনেক বেশি দক্ষ: ["" TO *]


এটি কি কেবল স্ট্রিং টাইপের ক্ষেত্রে কাজ করবে? আপনি বুলিয়ান জন্য এটি কিভাবে করবেন?
Jared

আমার ধারণা, এটি একইভাবে কাজ করা উচিত। তবে আমি এটি কখনও পরীক্ষা করে দেখিনি।
ম্যাথিয়াস এম


1

আপনি যদি সোলারশার্প ব্যবহার করে থাকেন তবে এটি নেতিবাচক প্রশ্নগুলিকে সমর্থন করে না।

আপনাকে কোয়েরিপ্যারামিটার.সিগুলি পরিবর্তন করতে হবে (একটি নতুন প্যারামিটার তৈরি করুন)

private bool _negativeQuery = false;

public QueryParameter(string field, string value, ParameterJoin parameterJoin = ParameterJoin.AND, bool negativeQuery = false)
{
    this._field = field;
    this._value = value.Trim();
    this._parameterJoin = parameterJoin;
    this._negativeQuery = negativeQuery;
}

public bool NegativeQuery
{
    get { return _negativeQuery; }
    set { _negativeQuery = value; }
}

এবং কোয়েরিপ্যারামিটারকলেকশন.সি ক্লাসে, টোস্ট্রিং () ওভাররাইডে, নেগেটিভ প্যারামিটারটি সত্য কিনা তা দেখায়

arQ[x] = (qp.NegativeQuery ? "-(" : "(") + qp.ToString() + ")" + (qp.Boost != 1 ? "^" + qp.Boost.ToString() : "");

আপনি যখন প্যারামিটার স্রষ্টাকে কল করবেন, যদি এটি একটি নেতিবাচক মান। সহজ পরিবর্তন করুন

List<QueryParameter> QueryParameters = new List<QueryParameter>();
QueryParameters.Add(new QueryParameter("PartnerList", "[* TO *]", ParameterJoin.AND, true));

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.